2010-01-25 31 views
8

Tengo un documento XML de formato específico que será enviado. Este documento siempre será del mismo tipo, por lo que es muy estricto.Analizador de XML rápido y liviano

Necesito analizar esto para poder convertirlo a JSON (bueno, una versión ligeramente bastarda para que otra persona pueda usarlo con DOJO).

Mi pregunta es, ¿debo usar un analizador XML muy ligero (no necesita SAX, etc.) (¿alguna idea?) O escribir el mío, básicamente convirtiéndolo en un StringBuffer y girando a través de la matriz? Básicamente, bajo las cubiertas, supongo que todos los analizadores de HTML girarán a través de la cadena (o memoria buffer) y analizarán, produciendo salida en el camino.

Gracias

editar

el XML será de entre 3/4 a aproximadamente 50 líneas como máximo (en el extremo) ..

+0

[¿AJAX o AJAJ?] (Http://izlooite.blogspot.com/2010/05/ajax-or-ajax-xml-vs-json.html) –

+0

prueba vtd-xml y no te arrepentirás .. –

+0

posible duplicado de [Pequeño, biblioteca XML minimalista y rápido para Java?] (http://stackoverflow.com/questions/9430392/small-minimalistic-and-fast-xml-library-for-java) –

Respuesta

10

No, no debe intentar escribir su propio analizador XML para esto.

SAX en sí es muy ligero y rápido, así que no estoy seguro de por qué pensar que es demasiado. También usar un búfer de cadena en realidad sería mucho menos escalable y luego usar SAX porque SAX no requiere que cargue todo el archivo XML en la memoria para usarlo. He usado SAX para analizar a través de archivos XML de varios gigabytes, lo que no podrías hacer usando búferes de cadenas en una máquina de 32 bits.

Si tiene archivos pequeños y no necesita preocuparse por el rendimiento, investigue el uso del DOM. aplicación de Java puede ser un poco molesto para usar (Se crea un documento utilizando un DocumentBuilder, que proviene de una DocumentBuilderFactory)

El código para crear un documento de un archivo es como sigue:

Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new FileInputStream("file.xml")); 

(tenga en cuenta que mantener una referencia a su creador de documentos acelerará las cosas si necesita analizar múltiples archivos)

Luego usa la función en org.w3c.dom.Document para leer o manipular los contenidos. Por ejemplo, getElementsByTagName() devuelve todos los elementos con un determinado nombre de etiqueta.

+1

Sospecho que por "peso ligero", Joe significa "es fácil de usar"; La API de devolución de llamada de SAX no es la más fácil de usar. –

+1

Hubiera + 'ed esto más si pudiera. SAX es la forma más eficiente posible de leer XML en Java. Sería difícil presionar para escribir un analizador de XML correcto mejor. Debería ser posible escribir la devolución de llamada para producir el JSON directamente, creo. Si hay poca traducción, puede ser extremadamente pequeña. – PSpeed

+0

@ Michael Borgwardt: Pienso usando el DOM sería más fácil que escribir su propio analizador :) –

1

puede utilizar DOM4J/xstream para leer el xml en un modal java equivalente y luego usa JSONLIB para convertir a JSON.

+0

+ dOM4J tiene API similar a SAX pero es más fácil. –

0

Utilice un analizador XML real. Si no lo haces, probablemente te picarán cuando algo cambie. El documento puede ser "muy estricto", pero dentro de dos años, algo probablemente se volverá a factorizar y cambiará la estructura para que analice la misma estructura de datos con un analizador XML y rompa un analizador sintáctico de cadenas caseras.

+0

Te veo apuntar, pero ya en diferentes áreas (es decir, el siguiente paso en la cadena) tienen bits de cambios de JSON puro para satisfacer sus necesidades. – joe90

+0

Así que el analizador no JSON está configurado para caer, pero no hay necesidad de complicar el problema al presentar el mismo problema al usar un analizador que no es realmente XML. – Quentin

7

Realmente depende del tipo de XML que está analizando. No escribiría su propio analizador cuando ya hay algo para hacer el trabajo por usted.

La elección de SAX/DOM es realmente basde de lo que está tratando de analizar, ver esto por la forma de decidir sobre cuál usar:

http://geekexplains.blogspot.com/2009/04/sax-vs-dom-differences-between-dom-and.html

Incluso si usted no usa SAX/DOM todavía hay opciones sencillas disponibles para usted, echar un vistazo a simple:)

http://simple.sourceforge.net/

también es posible que desee considerar la Stax.

+0

Gracias, voy a echar un vistazo a simple – joe90

3

tal vez debería mirar a KXML 2, un pequeño pull parser XML especialmente diseñado para entornos con limitaciones, para acceder, analizar y mostrar archivos XML para Java 2 Micro Edición dispositivos habilitados. Funciona bien con Java SE/EE también ;-). Ya que está diseñado para Micro Edition, es muy ligero (de pequeño tamaño) y en mi humilde opinión muy fácil de usar (mucho más fácil que SAX/DOM etc cosas).

Desde mi propia experiencia con KXML 2: Yo lo utilizaron para analizar archivos XML de más de 1 GB - Wikipedia volcados y yo estaba muy contento con el rendimiento del consumo de memoria/etc

Por fin ;-) - enlace: http://kxml.sourceforge.net/kxml2/

+0

Gracias ,. echaremos un vistazo a eso :) ya que necesitaremos una versión móvil en algún momento también – joe90

0

análisis en el backend y exponer JSON es probablemente el camino correcto para que tenga datos JSON de propósito general que pueda integrar fácilmente con otras fuentes, pero si tiene un mensaje simple y este es el único crees que estarías usando JSON, podrías intentar analizar el lado del cliente. Dojo tiene una experimental client-side XML parser

-1

¿Tiene utilizar XML?

Descubrí que mi propio formato de texto personalizado era mucho más rápido que XML o JSON con cualquiera de los paquetes disponibles, eran rápidos, pero al controlar mi propio formato y al hacer el análisis de cadenas pude cortar el tiempo a la mitad contra la implementación XML más rápida.

Obviamente, esto solo funciona si usted está completamente a cargo de los formatos y puede no ser apropiado para su situación, pero para cualquier otro en esta situación: no piense que XML es la opción más rápida que tiene. No es.

1

¿Usted realmente necesita para analizar/manipular cualquiera de los datos en el documento XML? De lo contrario, podría simplemente crear usar un XSLT. Muy simple, muy rápido.

+0

XSLT fue diseñado para transformar XML, por lo que usarlo para convertir a JSON es una buena idea. –

Cuestiones relacionadas