2010-02-25 23 views
6

So che la differenza tra Sax e Dom è piuttosto notevole per quanto riguarda l'analisi di Xml, ma per quanto riguarda la creazione di quelli? c'è anche un modo per creare un nuovo Xml usando Sax o che se voglio creare un nuovo file Xml basato sui miei dati nel mio programma, dovrò usare DOM?Dom Vs Sax - creazione di Xmls

Grazie

risposta

7

SAX è, wikipedia citando:

SAX (Simple API for XML) è un serial accesso parser API for XML.
SAX fornisce un meccanismo per che legge i dati da un documento XML.

ad esempio SAX può essere ottimo per leggere un documento XML, ma se si desidera scriverne uno, probabilmente si utilizzerà DOM.

+1

modo più semplice possibile per creare XML è quello di fare livello di byte/string concatnation .. per cui la gente vuole usare l'analisi API per creare documenti? –

+7

Facendo concatenazione di stringhe, dovrai affrontare la tua fuga (incluso CDATA, ad esempio, che molte persone dimenticano); che è già una buona ragione per usare un'API ;; Inoltre, DOM è (abbastanza) standardizza i linguaggi Accros, che è una buona cosa, che ti aiuterà a rendere il codice più facile da capire; E ho visto così tanto schifoso codice di "concatenazione" usato per creare XML ... –

1

DOM è la scelta naturale per la creazione di documenti.

2
  • DOM viene utilizzato quando i dati si inseriscono in memoria con un'API conveniente.
  • Con SAX sei in grado di scrivere enormi quantità di dati, SAX offre anche prestazioni più elevate.

È inoltre potrebbe essere interessavano in What are the differences between SAX and DOM parser

e DOM and SAX Put to the Test

+0

Inoltre, ve ne sono altri due degni di nota: * Pull o Stax * VTD-XML –

+0

è necessario effettuare l'accesso, in per leggere il link "DOM e SAX Put to the Test", questo fa schifo .. – iddober

1

Non ho visto le API di scrittura in stile SAX, è in sola lettura. Per scrivere le tue opzioni sono DOM e varie API di build non standardizzate (che sono spesso molto più convenienti da usare del DOM). Le API non standardizzate differiscono da lingua/libreria a un'altra, ma a es. Builder for Ruby. Ho anche redatto API simile per C++ con l'overloading degli operatori: (l'esempio è solo testando un possibile API, in realtà non fa nulla)

#include <string> 

struct XMLBuilder { 
    XMLBuilder& operator[](std::string const& elemName) { return *this; } 
    XMLBuilder& operator()(std::string const& attrName, std::string const& attrValue) { return *this; } 
    XMLBuilder& operator()(std::string const& innerText) { return *this; } 
    XMLBuilder& operator()(XMLBuilder const& innerDoc) { return *this; } 
}; 

int main() { 
    XMLBuilder() 
    ["contact"](XMLBuilder() 
     ["name"]("Patrick Hines") 
     ["phone"]("type", "home")("206-555-0144") 
     ["phone"]("type", "work")("425-555-0145") 
     ["address"](XMLBuilder() 
     ["street"]("...") 
     ["zip"]("12345") 
    ) 
    ) 
    ; 
} 
2

SAX è per la lettura di documenti XML, non li scrive.

Il DOM sull'altro lato è progettato per creare una mappatura tra una struttura in memoria e un documento XML.

Se si dispone già della propria struttura dati per i dati in memoria (che è molto più comoda della struttura DOM per l'elaborazione), la creazione di una struttura dati DOM comporterà la duplicazione dei dati. Forse non è quello che vuoi se hai grandi dati. Inoltre, dovrai creare la struttura DOM completamente prima di poterla scrivere in XML, raddoppiando la dimensione della memoria richiesta per la tua applicazione. Inoltre creerà una latenza nell'elaborazione.

Non conosco una libreria che possa aiutare a scrivere un documento XML, ma se stavo già usando SAX, avendo la mia struttura dati, non mi preoccuperei di DOM.

1

A volte userò semplicemente printf per creare semplici XML, ma in genere vale la pena utilizzare uno strumento di associazione XML come ad es. Code Synthesis XSD. Ciò creerà una gerarchia di classi per te, basata su un XSD. Basta compilare una gerarchia di oggetti e creerà l'XML per te.

In questo modo, si ottiene un controllo statico sul fatto che il proprio XML sarà ben formato e valido, il che aiuta davvero a far emergere i bug in anticipo.

Se avete mai usato JAXB o uno strumento simile per Java, è praticamente la stessa cosa.

0

È possibile provare a trovare un equivalente di .NET XmlWriter nella propria lingua/piattaforma.

0

sempre usare DOM per la creazione di nuovi XML ... Per leggere scopo preferire SAX ..

Problemi correlati