我有一些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中做些什么来移除空格?
由于
答案 0 :(得分:3)
您可以在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();
}
});
如果当前事件是完全由空格组成的isWhiteSpace
事件,则CHARACTERS
方法返回true。如果它不是CHARACTERS
事件,或者它是CHARACTERS
但不是所有空格,则返回false。
但是,重要的是要注意XMLStreamReader
不保证在单个CHARACTERS
事件中返回元素的所有文本内容,允许给你几个独立的字符块,你必须自己连接在一起。