Является ли XPath намного более эффективным по сравнению с DOM и SAX?

Мне нужно проанализировать строку xml и найти значения определенных текстовых узлов, значений атрибутов и т. Д. Я делаю это в javascript и для этого использовал класс DOMParser. Позже мне сообщили, что DOM занимает много памяти, а SAX - лучший вариант.

Недавно я обнаружил, что XPath также предоставляет простой способ поиска узлов.

Но я не уверен, какой из этих трех будет наиболее эффективным способом анализа XML. Пожалуйста, помогите....

5 ответов

Решение

SAX является анализатором сверху вниз и обеспечивает последовательный доступ к документу XML и хорошо работает только для чтения. DOM, с другой стороны, более устойчив - он считывает весь XML-документ в дерево и очень эффективен, когда вы хотите изменять, добавлять, удалять данные в этом XML-дереве. XPath полезен, когда вам нужна только пара значений из XML-документа, и вы знаете, где их найти (вы знаете путь к данным, / root / item / challange / text).

SAX: экономит время при итерации по документу, дает один проход для каждой итерации

DOM: Гибкость / производительность, дает больше возможностей для обработки ваших данных

XPath: эффективное время, когда вам нужно прочитать только пару значений

Если вы не используете исследовательский прототип потоковой передачи XPath, вполне вероятно, что ваш движок XPath загружает все в память, поэтому он будет иметь характеристики, аналогичные DOM. Так что это скорее зависит от вашего определения "эффективности". Это, конечно, проще в использовании, и реализации XPath могут измениться на более эффективные, в то время как DOM всегда будет иметь некоторое представление всего документа на клиентском компьютере, а SAX всегда будет намного более неудобным для программирования, чем XPath.

Этот документ от MSDN предоставляет обширную информацию об оптимизации обработки XML.

В частности, класс XPathDocument предназначен для более эффективной оценки выражений XPath, чем использование (на основе DOM) класса XmlDocument. Причина в том, что XPathDocument является представлением XML-документа только для чтения, в то время как реализация DOM также охватывает изменение документа.

Использование DOM имеет не менее важный недостаток, который обычно приводит к сложному спагетти-подобному коду, который трудно понять и поддерживать.

См. http://code.google.com/p/jlibs/wiki/XMLDog

Мы даем набор xpath для XMLDog и просим прослушать некоторый XML-документ. Он использует SAX и, пройдя один раз над документом, оценивает все данные XPath.

Если вам нужно только найти значения конкретных текстовых узлов, тогда XPath. Причина, по которой DOM занимает много памяти, заключается в том, что он читает весь XML и формирует дерево для документа. SAX основан на событиях. Следовательно, исходя из того, что вы описали, XPath лучше всего подходит для вашего сценария.

Другие вопросы по тегам