Нечастая ошибка синтаксического анализатора Java 6 StAX в eventReader при разборе CDATA asCharacters - PullRequest
0 голосов
/ 20 января 2012

У меня есть код для извлечения символов из синтаксического анализатора StAX с использованием eventReader. Код выглядит так:

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, но это происходит последовательно. Отладка Я обнаружил, что это происходит во втором событии isCharacters, когда первое событие - CDATA. Похоже, что синтаксический анализатор потерял след команды CDATA во втором событии.

Так, кто-нибудь еще видел это? У кого-нибудь есть лучший обходной путь, чем просто зачистка]]> с конца моей строки? Я не нашел ничего существенного в Интернете или здесь.

1 Ответ

0 голосов
/ 01 февраля 2012

вместо

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*/
}

НТН, Max

...