Domanda

Ho bisogno di analizzare una stringa XML e trovare i valori di specifici nodi di testo, i valori degli attributi, ecc Sto facendo questo in javascript e stava usando la classe DOMParser per lo stesso. Più tardi sono stato informato che DOM è occupa un sacco di memoria e SAX è una scelta migliore.

Di recente ho scoperto che anche XPath fornisce un modo semplice per trovare i nodi.

Ma io non sono sicuro di quale tra questi 3 sarebbe il modo più efficace per analizzare XML. Aiuto gentile ....

È stato utile?

Soluzione

SAX è un parser top-down e consente l'accesso seriale ad un documento XML, e funziona bene per l'accesso in sola lettura. DOM d'altra parte è più robusto - si legge l'intero documento XML in un albero, ed è molto efficiente quando si desidera modificare, aggiungere, rimuovere i dati in quell'albero XML. XPath è utile quando hai solo bisogno di un paio di valori dal documento XML, e non si sa dove trovarli (si conosce il percorso dei dati, / root / item / challange / testo).

SAX: Tempo efficiente quando l'iterazione attraverso il documento, dà un unico passaggio per ogni iterazione

DOM: Flessibile / prestazioni, vi dà più modi per lavorare i dati

XPath: Tempo efficiente quando hai solo bisogno di leggere un paio di valori

Altri suggerimenti

A meno che non si sta utilizzando il prototipo di ricerca di lo streaming XPath , è molto probabile che il vostro motore XPath sta caricando tutto in memoria, in modo che avrà caratteristiche simili a DOM. Quindi è piuttosto dipende dalla vostra definizione di 'efficienza'. E 'certamente più facile da usare, e le implementazioni XPath potrebbe cambiare per essere più efficiente, mentre DOM avrà sempre qualche rappresentazione dell'intero documento sulla macchina client, e SAX sarà sempre molto più difficile da programmare rispetto XPath.

Questo documento da MSDN fornisce una vasta gamma di informazioni su come ottimizzare l'elaborazione XML .

In particolare, la classe XPathDocument è progettato per essere più efficiente per valutare le espressioni XPath che utilizzare (DOM-based) classe XmlDocument. La ragione è che XPathDocument è una rappresentazione di sola lettura di un documento XML, mentre l'implementazione DOM anche copre modificare il documento.

con DOM ha un lato negativo, non meno importante che in genere si traduce in, complicato codice spaghetti-come che è difficile da capire e da gestire.

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

  

Diamo insieme di XPaths a XMLDog e chiediamo di sniffare qualche documento XML.   Esso utilizza SAX e con un passaggio sopra il documento valuta le   tutti i dati XPaths.

Se avete solo bisogno di trovare i valori di specifici nodi di testo, quindi XPath. La ragione DOM prende un sacco di memoria è perché legge in tutta XML e formare l'albero per il documento. SAX è basata su eventi. Quindi, in base a quello che ho descritto, XPath meglio si adatta il vostro scenario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top