首页 文章

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

提问于
浏览
0

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

    代替

    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,Max

相关问题