我有使用eventReader从StAX解析器中获取字符的代码。代码如下所示:
private String getNextCharacters(XMLEventReader eventReader) throws XMLStreamException {
StringBuilder characters = new StringBuilder();
XMLEvent event = eventReader.nextEvent();
String data = event.asCharacters().getData();
characters.append(data);
while (eventReader.peek() != null && eventReader.peek().isCharacters()) {
event = eventReader.nextEvent();
data = event.asCharacters().getData();
characters.append(data);
}
return characters.toString();
}
while循环是因为偶尔asCharacters不会在相邻的isCharacters事件之间合并。这似乎与设置或不设置的is_coalescing标志无关。这似乎是一个合理的解决方法,但它似乎驱动了次要的错误。偶尔我看到]]>附加到我的字符串。这种情况非常罕见 - 大约有5000行XML,但它始终如一。调试我发现当第一个事件是CDATA时,它发生在第二个isCharacters事件中。解析器似乎在第二次事件中忘记了CDATA指令。
那么,还有其他人看过这个吗?有没有人比简单地剥离更好的解决方法]]>我的字符串结束了?我在网上或这里找不到任何重要的内容。
答案 0 :(得分:0)
而不是
data = event.asCharacters().getData();
你可以去
Characters characters = event.asCharacters();
data = characters.getData();
if(characters.isCData()) {
/* handle CDATA */
} else if (characters.isWhiteSpace()) {
/* handle whitespace*/
} else if (characters.isIgnorableWhiteSpace()) {
/* handle ignorable whitespace*/
}
HTH, 最大