почему синтаксический анализ sax быстрее, чем анализ dom? и как работает stax?

несколько связано с: libxml2 из java

да, это довольно длинный вопрос - извините. Я держал его настолько плотным, насколько мне казалось возможным. Я выделил вопросы жирным шрифтом, чтобы облегчить просмотр перед чтением всего материала.

Почему синтаксический анализ sax быстрее, чем анализ dom? Единственное, что я могу придумать, это то, что с sax вы, вероятно, игнорируете большая часть входящих данных, и, таким образом, не тратить время на обработку частей xml, которые вам не нужны. IOW - после синтаксического анализа с SAX вы не можете воссоздать исходный ввод. Если бы вы написали свой синтаксический анализатор SAX так, чтобы он учитывал каждый узел xml (и, таким образом, мог бы воссоздать оригинал), то он не был бы быстрее, чем DOM, не так ли?

Причина, по которой я спрашиваю в том, что я пытаюсь быстрее анализировать XML-документы. Мне нужен доступ ко всему дереву xml ПОСЛЕ синтаксического анализа. Я пишу платформу для подключения сторонних сервисов, поэтому я не могу предвидеть, какие части XML-документа потребуются, а какие нет. Я даже не знаю структуру входящего документа. Вот почему я не могу использовать jaxb или sax. Объем памяти не является для меня проблемой, потому что XML-документы небольшие, и мне нужно только 1 в памяти за раз. Меня убивает время, необходимое для анализа этого относительно небольшого xml-документа. Раньше я не использовал Stax, но, возможно, мне нужно продолжить расследование, потому что это может быть золотая середина? Если я правильно понимаю, stax сохраняет исходную структуру xml и обрабатывает запрошенные мной части по запросу? Таким образом, исходное время синтаксического анализа может быть быстрым, но каждый раз, когда я прошу его пройти часть дерево, которое он еще не прошел, это когда происходит обработка?

Если вы предоставите ссылку, которая отвечает на большинство вопросов, я приму ваш ответ (вам не нужно напрямую отвечать на мои вопросы, если на них уже есть ответы в другом месте).

обновление: я переписал его на sax, и он анализирует документы в среднем 2,1 мс. Это улучшение (на 16% быстрее) по сравнению с 2,5 мс, которые потребляла dom, однако это не та величина, о которой я (и другие) мог бы предположить

Спасибо

11
задан Community 23 May 2017 в 11:46
поделиться