【发布时间】:2012-01-20 16:51:50
【问题描述】:
我有使用 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 指令的跟踪。
那么,有没有其他人看到这个?有没有人有比简单地从我的字符串末尾剥离 ]]> 更好的解决方法?我没有在网上或这里找到任何重要的东西。
【问题讨论】: