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

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

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

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

Ответы [ 5 ]

27 голосов
/ 27 марта 2009

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

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

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

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

10 голосов
/ 27 марта 2009

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

1 голос
/ 23 января 2010

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

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

1 голос
/ 27 марта 2009

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

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

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

0 голосов
/ 27 марта 2009

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

...