targetjump
@targetjump

Парсинг XML с помощью XMLStreamReader. Как узнать текущею позицию курсора?

Нужно добавлять теги в XML файл, причем форматинг, комментарии и тд, должны остаться в таком же виде, после чего сразу отпадает половина либ, другая половина не стакаеться по лицензии. В итоге было решено пользовать возможностиjavax.xml.stream.* .

Изначально алгоритм был таков:
1. Ищу нужный тег по имени + parent path(i.e. "/organization/customers")
2. Если нахожу, то делаю found = true
3. Дальше жду что тэг непустой и пишу като так:

switch (reader.next()) {
                //...
                case XMLStreamConstants.CHARACTERS:
                    if (src == null) {
                        src = reader.getTextCharacters();
                    }
                    if (found) {
                        result.append(src, 0, reader.getTextStart());
                        result.append(newContent);
                        final int offset = reader.getTextStart() + reader.getTextLength();
                        result.append(src, offset, src.length - offset);
                        applied = true;
                    }
                    break;
            }
}


что вроде бы и ок.
Но тут в спеке XMLStreamReader вижу это:
By default entity references must be expanded and reported transparently to the application. An exception will be thrown if an entity reference cannot be expanded. If element content is empty (i.e. content is "") then no CHARACTERS event will be reported.


Ну это ничего ибо есть метод reader.getElementText().isEmpty() и далее можно организовать логику относительно XMLStreamConstants.START_ELEMENT, XMLStreamConstants.END_ELEMENT, так же ее можно организовать похожим способом и при отсутсвии нужного тега, но есть одна проблема :
reader.getTextStart() - есть только в XMLStreamConstants.CHARACTERS, как тогда узнать позицию тега, например, при XMLStreamConstants.END_ELEMENT?
  • Вопрос задан
  • 2480 просмотров
Решения вопроса 1
targetjump
@targetjump Автор вопроса
ByteArrayInputStream + reader.getLocation().getCharacterOffset()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы