2010-02-25 11 views
6

Sé que la diferencia entre Sax y Dom es bastante considerable en cuanto al análisis de Xml, pero ¿qué hay de crear unos? ¿hay alguna manera de crear un nuevo Xml usando Sax o si quiero crear un nuevo archivo Xml basado en mis datos en mi programa, tendré que usar DOM?Dom Vs Sax - creando Xmls

Gracias

Respuesta

7

SAX es, citando a Wikipedia:

SAX (API simple para XML) es una serie acceso analizador API para XML.
SAX proporciona un mecanismo para leyendo datos de un documento XML.

es decir, SAX puede ser ideal para leer un documento XML, pero si desea escribir uno, probablemente use DOM.

+1

la forma más sencilla posible crear XML es hacer bytes/cadena concatnation nivel .. por qué la gente quiere usar el análisis API para crear ¿documentos? –

+7

Al realizar la concatenación de cadenas, tendrá que lidiar con el escape de usted mismo (incluido CDATA, por ejemplo, que muchas personas olvidan); que ya es una buena razón para usar una API ;; Además, DOM es (bastante) estandarizar los lenguajes acros, lo cual es una buena cosa, que ayudará a hacer que tu código sea más fácil de entender ;; Y he visto tanto código de "concatenación" horrible usado para crear XML ... –

1

Dom es la elección natural para la creación de documentos.

2
  • DOM se utiliza cuando sus datos se ajustan en la memoria con una API conveniente.
  • Con SAX puede escribir grandes cantidades de datos, SAX también proporciona un mayor rendimiento.

También puede ser que interessted en What are the differences between SAX and DOM parser

y DOM and SAX Put to the Test

+0

Además, hay dos más que vale la pena mencionar: * Pull o StaX * VTD-XML –

+0

necesita iniciar sesión, en Para leer el enlace "DOM y SAX poner a prueba", esto apesta. – iddober

1

No he visto las API de escritura de estilo SAX, es sólo para lectura. Para escribir, sus opciones son DOM y varias API de compilador no estandarizadas (que a menudo son mucho más cómodas de usar que DOM). Las API no estandarizadas difieren de un idioma/biblioteca a otro, pero ver p. Builder for Ruby. También he elaborado API similar para C++ con la sobrecarga de operadores: (el ejemplo es sólo una posible prueba de API, no hace nada)

#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 es para la lectura de documentos XML, no escribirlos.

DOM en el otro lado está destinado a crear una asignación entre una estructura en la memoria y un documento XML.

Si ya tiene su propia estructura de datos para sus datos en la memoria (que es mucho más conveniente que la estructura DOM para su procesamiento), la creación de una estructura de datos DOM duplicará sus datos. Tal vez eso no es lo que quieres si tienes datos grandes. Además, deberá crear la estructura DOM por completo antes de poder escribirla en XML, duplicando el tamaño de memoria requerido para su aplicación. Además, creará latencia en su procesamiento.

No conozco una biblioteca que ayude a escribir un documento XML, pero si ya estuviera usando SAX, con mi propia estructura de datos, no me molestaría con DOM.

1

A veces solo usaré printf para hacer XML simples, pero generalmente vale la pena usar una herramienta de enlace XML como, p. Ej. Code Synthesis XSD. Eso creará una jerarquía de clases para usted, basada en un XSD. Simplemente llena una jerarquía de objetos y creará el XML por usted.

De esta manera, obtiene la comprobación estática de que su XML esté bien formado y sea válido, lo que realmente ayuda a detectar los errores con anticipación.

Si alguna vez ha usado JAXB o alguna herramienta similar para Java, es prácticamente lo mismo.

0

Puede intentar encontrar un equivalente de .NET XmlWriter en su idioma/plataforma.

0

Siempre utilizar DOM para crear nuevos XML ... Para leer propósito prefieren SAX ..

Cuestiones relacionadas