2009-03-27 9 views
20

Necesito analizar una cadena xml y encontrar valores de nodos de texto específicos, valores de atributos, etc. Estoy haciendo esto en javascript y estaba usando la clase DOMParser para lo mismo. Más tarde me informaron que DOM ocupa mucha memoria y SAX es una mejor opción.¿Es XPath mucho más eficiente en comparación con DOM y SAX?

Recientemente descubrí que XPath también proporciona una forma simple de encontrar nodos.

Pero no estoy seguro de cuál de estos 3 sería la forma más eficiente de analizar XML. Amablemente ayuda ....

Respuesta

27

SAX es un analizador de arriba hacia abajo y permite el acceso en serie a un documento XML, y funciona bien para el acceso de solo lectura. Por otro lado, DOM es más robusto: lee todo el documento XML en un árbol y es muy eficiente cuando se quiere alterar, agregar o eliminar datos en ese árbol XML. XPath es útil cuando solo necesita un par de valores del documento XML, y sabe dónde encontrarlos (conoce la ruta de los datos,/root/item/challange/text).

SAX: Tiempo eficiente cuando se itera a través del documento, da un paso único para cada iteración

DOM: Flexible/rendimiento, le da más maneras de trabajar sus datos

XPath: Tiempo eficiente cuando sólo necesita leer un par de valores

+0

No olvide mencionar vtd-xml, con implementación de xpath incorporada. –

0

Si solo necesita encontrar valores de nodos de texto específicos, entonces XPath. El motivo por el que DOM ocupa mucha memoria es porque lee todo el XML y forma el árbol del documento. SAX está basado en eventos. Por lo tanto, en base a lo que ha descrito, XPath se adapta mejor a su escenario.

10

A menos que esté utilizando el prototipo de investigación de streaming XPath, es muy probable que su motor XPath esté cargando todo en la memoria, por lo que tendrá características similares a DOM. Por lo tanto, depende de su definición de "eficiencia". Ciertamente es más fácil de usar, y las implementaciones de XPath podrían cambiar para ser más eficientes, mientras que DOM siempre tendrá alguna representación de todo el documento en la máquina cliente, y SAX siempre será mucho más difícil de programar que XPath.

+0

Me parece extraño que las otras respuestas no mencionen su punto, ya que XPath todavía tiene que analizar el documento de alguna manera.DOM, SAX y XPath son diferentes API para acceder a un documento; pero solo DOM y SAX son analizadores de un documento. ¿A menos que #C haga un analizador para XPath que no sepamos? – 13ren

+0

BTW: su XSQ vinculado utiliza SAX para analizar debajo; no tiene un analizador XPath específico. – 13ren

+0

Sí, es una capa sobre un analizador de transmisión en lugar de un modelo de objetos. –

1

This document from MSDN proporciona una gran cantidad de información sobre la optimización del procesamiento XML.

En particular, la clase XPathDocument está diseñada para ser más eficiente para evaluar expresiones XPath que para usar (la clase XmlDocument basada en DOM). La razón es que XPathDocument es una representación de solo lectura de un documento XML, mientras que una implementación de DOM también cubre el cambio del documento.

El uso de DOM tiene un inconveniente no menos importante que, por lo general, resulta en un código complicado y similar a un espagueti que es difícil de comprender y mantener.

Cuestiones relacionadas