Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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