gpt4 book ai didi

Java XMLStreamReader 给出不需要的字符串

转载 作者:数据小太阳 更新时间:2023-10-29 02:31:24 26 4
gpt4 key购买 nike

我有一些正在阅读的 xml。

<application>
<client>website</client>
<register>
<name>
<first>Tommy</first>
<second>Jay</second>
</name>
<address>
<firstLine>line1</firstLine>
<secondLine>line2</secondLine>
<city>city1</city>
<county>county1</county>
<postcode>YY12 9UY</postcode>
</address>
</register>
</application>

无论如何,当我使用如下的 xmlStreamReader 读取它时

public XMLElementALT getNextElement()
{
element = new XMLElementALT();
int event;
try
{
event = reader.next();
}
catch (XMLStreamException ex)
{
return null;
}

if (event == XMLStreamConstants.START_ELEMENT)
{
element.setTag(reader.getLocalName());
}
else if (event == XMLStreamConstants.CHARACTERS)
{
element.setAttribute(reader.getText());
}
else if (event == XMLStreamConstants.END_ELEMENT)
{
element.setEndTag(reader.getLocalName());
}
else if (event == XMLStreamConstants.END_DOCUMENT)
{
element.setFinished();
}
return element;
}

一切顺利!然而,我遇到的问题是,在读取标签后,我得到的下一个事件是事件 XMLStreamConstants.CHARACHTERS 并报告我有属性(“\n”),它是标签和下一个标签之间的空间。我怎样才能删除它?我想将下一个事件作为 XMLStreamConstants.START_ELEMENT。我知道我可以将我的 XML 全部放在一行中,但我希望在输入它时有间隙,以便我可以看到结构。我还有一个要验证的 xsd,这会成功验证 xml,我可以在 xsd 中做些什么来删除空格吗?

谢谢

最佳答案

您可以忽略仅包含空格的 CHARACTERS 事件,无论是在您的 getNextElement 方法中还是在您创建阅读器时使用过滤器

XMLInputFactory factory = XMLInputFactory.newFactory();
XMLStreamReader rawReader = factory.createXMLStreamReader(...);
XMLStreamReader filteredReader = factory.createFilteredReader(rawReader,
new StreamFilter() {
public boolean accept(XMLStreamReader r) {
return !r.isWhiteSpace();
}
});

如果当前事件是完全由空格组成的 CHARACTERS 事件,则 isWhiteSpace 方法返回 true。如果它不是 CHARACTERS 事件,或者它是 CHARACTERS 但并非全是空白,则返回 false。

但是,重要的是要注意 XMLStreamReader 不能保证在一个 CHARACTERS 中返回一个元素的所有文本内容事件,允许给你几个单独的字符 block ,你必须自己将它们连接在一起。

关于Java XMLStreamReader 给出不需要的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com