1) DOM (analizador JAXP Crimson)
DOM es el estándar oficial del W3C para representar documentos XML de forma independiente de la plataforma y el idioma. DOM es una colección de nodos o piezas de información organizadas en una estructura jerárquica. Esta jerarquía permite a los desarrolladores buscar en el árbol información específica. Analizar esta estructura generalmente requiere cargar todo el documento y construir la jerarquía antes de poder realizar cualquier trabajo. Debido a que se basa en la jerarquía de información, el DOM se considera basado en árboles o en objetos. DOM, y el procesamiento basado en árboles en general, tiene varias ventajas. Primero, debido a que el árbol es persistente en la memoria, se puede modificar para que la aplicación pueda realizar cambios en los datos y las estructuras. También permite la navegación hacia arriba y hacia abajo en el árbol en cualquier momento, en lugar de un proceso único como SAX. DOM también es mucho más sencillo de usar.
2) SAXO
Las ventajas del procesamiento SAX son muy similares a las ventajas de la transmisión de medios. El análisis puede comenzar inmediatamente en lugar de esperar a que se procesen todos los datos. Además, dado que la aplicación simplemente verifica los datos a medida que se leen, no es necesario almacenarlos en la memoria. Esta es una gran ventaja para documentos grandes. De hecho, la aplicación ni siquiera tiene que analizar el documento completo; puede dejar de analizarlo cuando se cumple una determinada condición. En general, SAX también es mucho más rápido que su reemplazo, DOM.
¿DOM o SAX? Para los desarrolladores que necesitan escribir su propio código para procesar documentos XML, elegir el modelo de análisis DOM o SAX es una decisión de diseño muy importante. DOM usa una estructura de árbol para acceder a documentos XML, mientras que SAX usa un modelo de eventos.
El analizador DOM convierte un documento XML en un árbol que contiene su contenido y puede atravesar el árbol. La ventaja de usar DOM para analizar el modelo es que la programación es fácil, los desarrolladores solo necesitan llamar a las instrucciones de construcción del árbol y luego usar las API de navegación para acceder a los nodos del árbol necesarios para completar la tarea. Los elementos del árbol se pueden agregar y modificar fácilmente. Sin embargo, dado que cuando se utiliza el analizador DOM es necesario procesar todo el documento XML, los requisitos de rendimiento y memoria son relativamente altos, especialmente cuando se encuentran archivos XML grandes. Debido a sus capacidades transversales, los analizadores DOM se utilizan a menudo en servicios donde los documentos XML deben cambiar con frecuencia.
El analizador SAX utiliza un modelo basado en eventos. Puede desencadenar una serie de eventos al analizar un documento XML. Cuando se encuentra una etiqueta determinada, puede activar un método de devolución de llamada para informar al método que se ha encontrado la etiqueta especificada. SAX generalmente tiene menores requisitos de memoria porque permite a los desarrolladores decidir qué etiquetas procesar. Especialmente cuando los desarrolladores solo necesitan procesar parte de los datos contenidos en el documento, la escalabilidad de SAX se refleja mejor. Pero la codificación es más difícil cuando se utiliza un analizador SAX y es difícil acceder a varios datos diferentes en el mismo documento al mismo tiempo.
3) JDOM http://www.jdom.org
El propósito de JDOM es ser un modelo de documento específico de Java que simplifique la interacción con XML y sea más rápido que implementarlo usando DOM. JDOM ha sido muy promocionado y promocionado desde que fue el primer modelo específico de Java. Se está considerando su posible uso como "Extensión estándar de Java" a través de la "Solicitud de especificación de Java JSR-102". El desarrollo de JDOM se inició desde principios de la década de 2000.
Hay dos diferencias principales entre JDOM y DOM. Primero, JDOM solo usa clases concretas y no interfaces. Esto simplifica la API de alguna manera, pero también limita la flexibilidad. En segundo lugar, la API hace un uso extensivo de la clase Colecciones, simplificando su uso para los desarrolladores de Java que ya están familiarizados con estas clases.
La documentación de JDOM afirma que su propósito es "resolver el 80% (o más) de los problemas de Java/XML utilizando el 20% (o menos) del esfuerzo" (suponiendo que el 20% se base en la curva de aprendizaje). JDOM es ciertamente útil para la mayoría de las aplicaciones Java/XML, y la mayoría de los desarrolladores encuentran la API mucho más fácil de entender que DOM. JDOM también incluye controles bastante extensos sobre el comportamiento del programa para evitar que los usuarios hagan algo que no tenga sentido en XML. Sin embargo, aún requiere que comprenda XML lo suficientemente bien como para hacer más que lo básico (o incluso comprender los errores en algunos casos). Este puede ser un trabajo más significativo que aprender las interfaces DOM o JDOM.
JDOM en sí no contiene un analizador. Normalmente utiliza un analizador SAX2 para analizar y validar documentos XML de entrada (aunque también puede tomar representaciones DOM previamente construidas como entrada). Contiene convertidores para generar representaciones JDOM en flujos de eventos SAX2, modelos DOM o documentos de texto XML. JDOM es de código abierto y se publica bajo una variante de la licencia Apache.
4) DOM4J http://dom4j.sourceforge.net
Aunque DOM4J representa un desarrollo completamente independiente, originalmente era una bifurcación inteligente de JDOM. Incorpora muchas características más allá de la representación básica de documentos XML, incluida la compatibilidad con XPath integrada, la compatibilidad con esquemas XML y el procesamiento basado en eventos para documentos grandes o en streaming. También proporciona opciones para crear representaciones de documentos con capacidades de acceso paralelo a través de la API DOM4J y las interfaces DOM estándar. Ha estado en desarrollo desde la segunda mitad de 2000.
Para admitir todas estas funciones, DOM4J utiliza interfaces y métodos de clase base abstractos. DOM4J hace un uso intensivo de la clase Colecciones en la API, pero en muchos casos también proporciona alternativas que permiten un mejor rendimiento o un enfoque de codificación más directo. El beneficio directo es que aunque DOM4J paga el precio de una API más compleja, proporciona mucha mayor flexibilidad que JDOM.
Si bien agrega flexibilidad, integración XPath y manejo de documentos grandes, los objetivos de DOM4J son los mismos que los de JDOM: facilidad de uso y operación intuitiva para desarrolladores de Java. También pretende ser una solución más completa que JDOM, logrando el objetivo de manejar esencialmente todos los problemas de Java/XML. Si bien logra ese objetivo, pone menos énfasis que JDOM en prevenir el comportamiento incorrecto de las aplicaciones.
DOM4J es una API XML de Java muy, muy excelente con excelente rendimiento, funciones potentes y extrema facilidad de uso. También es un software de código abierto. Hoy en día se puede ver que cada vez más software Java utiliza DOM4J para leer y escribir XML. Vale la pena mencionar que incluso JAXM de Sun también utiliza DOM4J.
2... comparar
1) DOM4J tiene el mejor rendimiento. Incluso JAXM de Sun también usa DOM4J. Actualmente, muchos proyectos de código abierto usan DOM4J ampliamente. Por ejemplo, el famoso Hibernate también usa DOM4J para leer archivos de configuración XML. Si la portabilidad no es un problema, utilice DOM4J.
2) JDOM y DOM tuvieron un rendimiento deficiente durante las pruebas de rendimiento y la memoria se desbordó al probar un documento de 10 M. También vale la pena considerar el uso de DOM y JDOM en el caso de documentos pequeños. Aunque los desarrolladores de JDOM han declarado que esperan centrarse en los problemas de rendimiento antes del lanzamiento oficial, desde el punto de vista del rendimiento, realmente no tiene nada que recomendar. Además, DOM sigue siendo una muy buena opción. La implementación DOM se usa ampliamente en muchos lenguajes de programación. También es la base de muchos otros estándares relacionados con XML y, dado que el W3C lo recomienda oficialmente (a diferencia del modelo Java no basado en estándares), también puede ser necesario en ciertos tipos de proyectos (como el uso del DOM en JavaScript).
3) SAX funciona mejor, lo que depende de su método de análisis específico: basado en eventos. Un SAX detecta el flujo XML entrante, pero no lo carga en la memoria (por supuesto, cuando se lee el flujo XML, algunos documentos se ocultarán temporalmente en la memoria).
3. Uso básico de cuatro métodos de operación xml
archivo xml: