Самый быстрый и эффективный способ анализа XML-данных без ограниченной схемы
В настоящее время я обрабатываю данные XML (в мегабайтах) следующим образом:
- Создать объект DOM для записи XML.
- Примените запросы XPath к объекту DOM, чтобы получить поля.
Мой XML выглядит следующим образом:
<root>
<element>
<sub-element>A</sub-element>
<sub-element>B</sub-element>
</sub-element>
<sub-element>D</sub-element>
<sub-element>E</sub-element>
</element>
</root>
Сценарий № 1: получение списка подэлементов элемента, как ожидается, вернет следующий вывод
подэлемент - {'A','B','','D','E'} - 3-й узел в XML содержит пустой / ноль, который должен быть создан как пустой узел. Но в настоящее время я получаю вывод, поскольку {'A','B','D','E'} 3-е значение не создано.
Сценарий № 2: в нашем приложении используются сложные запросы, которые утомительны в XPATH для извлечения поля из объекта XML DOM (например, параметризованные XPATH)
Есть ли способ, которым мы могли бы достичь этого, используя сам DOM эффективным и быстрым способом?
или же
Нужно ли нам создавать граф объектов из XML (через XStream) и обрабатывать запрос обычным Java-способом обработки объекта POJO?
или же
Есть ли лучший способ сделать это?
Заранее спасибо.
1 ответ
Ну, почти любая другая модель дерева будет лучше, чем DOM. Похоже, вы предлагаете удалить часть решения XPath, но было бы гораздо лучше удалить часть DOM. Например, саксонский движок XPath работает в 5-10 раз быстрее при работе на собственном саксонском дереве, чем при работе с DOM. (DOM действительно неэффективен для поиска, в основном из-за неуклюжего способа обработки пространств имен).
Но ваш вопрос довольно запутанный. Ваш образец XML не является правильно сформированным: я подозреваю, что вы написали </sub-element>
где ты имел ввиду <sub-element/>
, Если ваш XPath извлекает этот пустой элемент и вы его не хотите, вам просто нужно исправить свой XPath.
В Сценарии № 2, если написание XPath для выражения ваших сложных условий "утомительно", то навигация для поиска тех же данных с использованием низкоуровневой навигации DOM будет бесконечно более утомительной. Но тогда вы, кажется, запутались в своих целях. Ваш заголовок говорит, что вы хотите быть "быстрым и эффективным", но теперь внезапно ваша цель - быть менее "утомительным". Вы должны решить, чего вы пытаетесь достичь.