parse - xml to java object jaxb online
¿Dónde puedo encontrar una comparación detallada de los marcos de Java XML? (2)
Estoy tratando de elegir un marco de procesamiento XML para mis proyectos Java, y estoy perdido en los nombres ... XOM, JDOM, etc. ¿Dónde puedo encontrar una comparación detallada de todos los marcos Java XML populares?
Como Blaise señaló se adhieren a los estándares. Pero existen múltiples estándares creados durante el período para resolver diferentes problemas / casos de uso. Cuál elegir completamente depende de su requerimiento. Espero que la comparación a continuación pueda ayudarte a elegir la correcta.
Ahora hay dos cosas que debes elegir. API y las implementaciones de la API (hay muchas)
API
Sax: pros
- evento basado
- memoria eficiente
- más rápido que DOM
- soporta validación de esquemas
Saxo: contras
- Sin modelo de objeto, tienes que aprovechar los eventos y crear tu auto
- Un solo análisis del xml y solo puede avanzar.
- solo leer api
- no hay soporte xpath
- un poco más difícil de usar
DOM: Pros
- modelo de objeto en memoria
- conserva el orden de los elementos
- bidireccional
- leer y escribir api
- Manipulación xml
- fácil de usar
- soporta validación de esquemas
DOM: Contras
- memoria de memoria para documentos XML más grandes (normalmente se utiliza para documentos XML de menos de 10 mb)
- más lento
- Modelo genérico, es decir, trabajas con nodos.
Stax: Pros
- Lo mejor de SAX y DOM, es decir, facilidad de DOM y eficiencia de SAX
- memoria eficiente
- Modelo de tracción
- leer y escribir api
- soporta subparsing
- Puede leer varios documentos al mismo tiempo en un solo hilo
- El procesamiento paralelo de XML es más fácil
Stax: contras
- no hay soporte para validación de esquemas (por lo que recuerdo, no estoy seguro de si lo han agregado ahora)
- Solo se puede avanzar como saxo
- no xml manipulación
JAXB: Pros
- le permite acceder y procesar datos XML sin tener que conocer XML
- bidireccional
- más memoria eficiente que DOM
- SAX y DOM son analizadores genéricos donde, como JAXB, crea un analizador específico para su XML Schmea
- conversión de datos: JAXB puede convertir xml a tipos java
- soporta la manipulación de XML a través de la API de objetos
JAXB: Contras
- sólo puede analizar XML válido
Trax: para transformar XML de 1 formulario a otro formulario utilizando XSLT
Implementaciones
SAX, DOM, Stax, JAXB son solo especificaciones. Hay muchas implementaciones de código abierto y comerciales de estas especificaciones . La mayoría de las veces puede quedarse con lo que viene con JDK o su servidor de aplicaciones. Pero a veces es necesario utilizar una implementación diferente que se proporciona de forma predeterminada. Y aquí es donde se puede apreciar el api envoltorio JAXP . JAXP le permite cambiar las implementaciones a través de la configuración sin la necesidad de modificar su código. También proporciona una api independiente de analizador / especificación para analizar, transformar, validar y consultar documentos XML.
Desempeño y otras comparaciones de varias implementaciones.
- Stax: http://java.sun.com/performance/reference/whitepapers/StAX-1_0.pdf
- La mayor parte de la API: http://www.ibm.com/developerworks/xml/library/x-databdopt2/
- Discusión sobre JAXB versus XmlBeans sobre SO: JAXB vs Apache XMLBeans
- http://www.ibm.com/developerworks/xml/library/x-injava/
Ahora los estándares son buenos, pero de vez en cuando se encuentra con esta loca base de datos en la que tiene que admitir el análisis de documentos XML de 100 gigabytes de tamaño o necesita un procesamiento ultra rápido de XML (puede ser que esté implementando un chip analizador XML) y esto es cuando necesitas volcar los estándares y buscar una forma diferente de hacer las cosas. ¡Se trata de usar la herramienta adecuada para el trabajo correcto! Y aquí es donde te sugiero que vtd-xml un vistazo a vtd-xml
Durante los días iniciales de SAX y DOM, las personas querían API más simples que las proporcionadas por cualquiera de ellos. JDOM , dom4j , XmlBeans , JiBX , Castor son los que conozco que se hicieron populares.
@ Pangea
JAXB no es directamente comparable a DOM y SAX. Las API de análisis Java DOM y SAX son API de nivel inferior para analizar documentos XML, mientras que JAXB (API de Java para enlace XML) es una API de nivel superior para convertir elementos y atributos XML a una jerarquía de objetos Java (y viceversa). Las implementaciones de JAXB probablemente usarán un analizador DOM o SAX entre bastidores para realizar el análisis real de los datos de entrada XML.