Факторы, определяющие, использовать ли DOM, SAX или XPath - PullRequest
1 голос
/ 22 июня 2010

Я нахожусь в странном состоянии моего кода. Я пишу модуль Apache, который должен добавить комментарий в тег заголовка документа ответа (кроме выполнения каких-то других неважных вещей).

В тот момент, когда мне нужно разобрать ответный документ, у меня в памяти есть весь документ в виде буфера char * (я использую C). Так что я не совсем уверен, какой API выбрать?

DOM, как я знаю, создаст свое собственное в памяти дерево представления документа. Я могу сэкономить место в памяти, освободив предыдущий буфер.

SAX: Я действительно не очень хорошо понимаю.

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

Дайте мне некоторое представление, как лучше всего подходит текущая ситуация?

Ответы [ 3 ]

1 голос
/ 22 июня 2010

Что касается DOM против SAX, помните, что DOM добавляет задержку к вашей обработке.

DOM проще, поскольку он автоматически создает структуру.В этой структуре вы добавите нужные данные, а затем сможете сгенерировать буфер char * из структуры с помощью DOM.Но вы должны понимать, что вам нужно полностью создать структуру, прежде чем вы сможете добавить свои данные, и только тогда вы можете преобразовать их обратно в char * для отправки.Вот где добавляется задержка.

Использование SAX - больше работы.Вы работаете с XML по мере его поступления.Вам даже не нужно ждать, пока появятся полные данные char *, чтобы начать работу с ним.Вы обнаруживаете, где находитесь в документе, как только элемент запускается, и вы можете ввести свои дополнительные данные на лету.Добавлена ​​очень небольшая задержка и нет дублирования данных.

Я не знаю много о XPath, но он бесполезен для анализа.

1 голос
/ 22 июня 2010

С точки зрения работы с XML (или HTML) и Apache, если вы делаете достаточно простые вещи, такие как вставка комментария в определенное место в документе, вероятно, будет более эффективно работать с XSL. Это изначально относится к документам в стиле XML, из которых HTML и XHTML являются подмножеством, без необходимости конвертировать их в какой-то другой формат для более удобной работы с другими языками программирования. С другой стороны, при разборе DOM и SAX каждый рассматривает документ XML таким способом, с которым легче иметь дело, либо преобразовывая его в собственный объект на вашем конкретном языке, либо регистрируя «события», которые может обрабатывать ваш код, соответственно. .

Чтобы узнать больше об XSL, взгляните на http://www.w3schools.com/xsl/.

Дополнительная мысль - если вы действительно делаете что-то простое, например, добавляете комментарий к заголовку, было бы более эффективно использовать SAX-разбор, чем DOM-разбор, поскольку простое редактирование не должно требовать разбора всего документа. Скорее, он будет более элегантно обработан, ожидая правильного события достижения элемента «head» и затем добавляя к нему все, что вы пожелаете.

1 голос
/ 22 июня 2010

DOM и SAX - это «способы анализа данных».DOM анализирует весь документ и создает структуру данных.SAX анализирует документ «элемент за элементом», давая вам знать, когда он сталкивается с чем-то интересным, и ожидает, что вы с ним справитесь.

XPath - это способ ссылки на данные в документе DOM, как только он у вас есть.То есть, говоря «первый узел» и т. Д. Он очень мощный и замечательный, но не используется для синтаксического анализа.

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

Для меня все, что я рассматриваю, основано на том, повлияет ли медлительность и увеличение объема памяти при использовании DOM на мое приложение:

  • Разбираю ли я очень большие документы?
  • Разбираю ли я много-много вещей?
  • Имеет ли значение скорость на самом деле?

Также стоит отметить, что, если вы решите использовать DOM, убедитесь, что выисследовать, какие библиотеки там.Плохая библиотека может быть в 10-100 раз медленнее хорошей.

...