解析CDATA asCharacters时,eventReader中不常见的Java 6 StAX解析器错误

时间:2012-01-20 16:51:50

标签: java xml parsing stax

我有使用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指令。

那么,还有其他人看过这个吗?有没有人比简单地剥离更好的解决方法]]>我的字符串结束了?我在网上或这里找不到任何重要的内容。

1 个答案:

答案 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, 最大