2009-03-27 14 views
20

Ho bisogno di analizzare una stringa xml e trovare valori di specifici nodi di testo, valori di attributi, ecc. Lo sto facendo in javascript e stavo usando la classe DOMParser per lo stesso. Più tardi sono stato informato che il DOM occupa molta memoria e SAX è un'opzione migliore.XPath è molto più efficiente rispetto a DOM e SAX?

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

Ma non sono sicuro quale di questi 3 sarebbe il modo più efficiente per analizzare XML. Gentilmente aiuto ....

risposta

27

SAX è un parser top-down e consente l'accesso seriale a un documento XML e funziona bene per l'accesso di sola lettura. D'altro canto, DOM è più robusto: legge l'intero documento XML in un albero ed è molto efficiente quando si desidera modificare, aggiungere, rimuovere i dati in tale albero XML. XPath è utile quando hai bisogno di un paio di valori dal documento XML e sai dove trovarli (conosci il percorso dei dati,/root/item/challange/text).

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

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

XPath: Tempo efficiente quando solo tu è necessario leggere un paio di valori

+0

Non dimenticare di menzionare vtd-xml, con implementazione di xpath incorporata. –

0

Se è necessario solo trovare i valori di nodi di testo specifici, XPath. Il motivo per cui DOM occupa molta memoria è perché legge nell'intero XML e forma l'albero per il documento. SAX è basato su eventi. Quindi, in base a ciò che hai descritto, XPath si adatta meglio al tuo scenario.

10

A meno che non si stia utilizzando il prototipo di ricerca di streaming XPath, è molto probabile che il motore XPath stia caricando tutto in memoria, quindi avrà caratteristiche simili a DOM. Quindi dipende piuttosto dalla tua definizione di "efficienza". È certamente più facile da usare e le implementazioni XPath potrebbero cambiare per essere più efficienti, mentre DOM avrà sempre una rappresentazione dell'intero documento sulla macchina client, e SAX sarà sempre molto più difficile da programmare rispetto a XPath.

+0

Trovo strano che le altre risposte non menzionino il tuo punto, dal momento che XPath deve ancora analizzare il documento in qualche modo.DOM, SAX e XPath sono diverse API per l'accesso a un documento; ma solo DOM e SAX sono parser di un documento. A meno che alcuni #C eseguano un parser per XPath di cui non siamo a conoscenza? – 13ren

+0

BTW: il tuo XSQ collegato usa SAX per l'analisi sotto - non ha un parser XPath specifico. – 13ren

+0

Sì, è un livello sopra un parser di streaming piuttosto che un modello di oggetto. –

1

This document from MSDN fornisce una serie di informazioni sull'ottimizzazione dell'elaborazione XML.

In particolare, la classe XPathDocument è progettata per essere più efficiente per la valutazione delle espressioni XPath rispetto alla classe XmlDocument (basata su DOM). Il motivo è che XPathDocument è una rappresentazione di sola lettura di un documento XML, mentre un'implementazione DOM copre anche la modifica del documento.

L'utilizzo di DOM ha uno svantaggio non meno importante che solitamente si traduce in un codice complicato, simile a spaghetti, che è difficile da comprendere e mantenere.

1

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

diamo insieme di XPaths per XMLDog e chiedere ad annusare qualche documento XML. Utilizza SAX e con una sola passata sul documento valuta tutti gli XPath dati.

Problemi correlati