Stax parsing-разбор дочерних узлов в зависимости от выбранного родителя


Мне нужно разобрать огромный xml-файл на сервере и отправить его клиенту.
Я хочу сделать синтаксический анализ по требованию-то есть сначала разобрать и показать только родительские узлы, а когда клиент нажимает на родительский узел - отправить запрос на сервер, который сообщает, какой родитель был выбран, и только затем разобрать и отправить его дочерние элементы (опять же, не все поддерево, а только родители).
Я думал об использовании Stax parser, но я не понимаю, как с ним работать, когда речь заходит о отношения между родителями и детьми. Как сказать синтаксическому анализатору, чтобы он не переходил к следующему элементу START, который является дочерним, а переходил к следующему родительскому элементу на его уровне? а также-есть ли способ вернуться к реализации итератора? после выбора одного родителя и просмотра его детей, могу ли я вернуться и увидеть предыдущего родителя?
Я был бы очень признателен за любое предложение!
Спасибо.

1 5

1 ответ:

  1. Нет, вы не можете пропустить поддерево XML-документа, не проанализировав его сначала. Это верно для каждого парсера, а не только для StAX. (зная, к какой точке перейти, подразумевается, что вы уже проанализировали элементы между ними.)

  2. Однако, поддерживая счетчик уровня вложенности, который вы увеличиваете с каждым событием начального элемента и уменьшаете с каждым событием конечного элемента, легко игнорировать все события, которые приходят с уровня ниже вашего целевого уровень.

  3. Парсинг-это один из способов, а не случайный доступ, вы не можете прыгать туда и обратно. (Опять же, это предполагает, что синтаксический анализатор хранит представление всего, что было проанализировано до сих пор, что именно то, чего StAX был создан, чтобы избежать.) Но, конечно, вы можете попытаться записать байтовую позицию каждого родительского тега в файле, а затем искать его, если у вас есть файл, открытый для произвольного доступа. Однако в этом подходе есть немало подводных камней.

В целом, ваше использование кейс не выглядит подходящим для Стэкса. Вы пробовали VTD-XML ? В зависимости от того, насколько велик ваш файл, он может быть именно тем, что вы хотите.