Necesito leer archivos XML pequeños (pocos MB como máximo, codificados con UTF-8), revolver buscando varios elementos y atributos, quizás modificar algunos y volver a escribir el XML nuevamente en el disco (preferiblemente con un formato agradable e indentado) .
¿Cuál sería el mejor analizador XML para mis necesidades? Hay mucho para elegir. Algunos que conozco son:
Y, por supuesto, el del JDK (estoy usando Java 6). Estoy familiarizado con Xerces, pero lo encuentro torpe.
Recomendaciones?
Respuestas:
Si la velocidad y la memoria no son un problema, dom4j es una muy buena opción. Si necesita velocidad, usar un analizador StAX como Woodstox es la forma correcta, pero debe escribir más código para hacer las cosas y acostumbrarse a procesar XML en secuencias.
fuente
Creo que no deberías considerar ninguna implementación específica del analizador. Java API for XML Processing le permite usar cualquier implementación de analizador conforme de manera estándar. El código debería ser mucho más portátil, y cuando te das cuenta de que un analizador específico ha envejecido demasiado, puedes reemplazarlo por otro sin cambiar una línea de tu código (si lo haces correctamente).
Básicamente, hay tres formas de manejar XML de manera estándar:
Olvídate de las API propietarias como JDOM o Apache (es decir, Apache Xerces XMLSerializer ) porque te vinculará a una implementación específica que puede evolucionar en el tiempo o perder la compatibilidad con versiones anteriores, lo que te hará cambiar tu código en el futuro cuando quieras actualizar a una nueva versión de JDOM o cualquier analizador que use. Si se apega a la API estándar de Java (usando fábricas e interfaces) su código será mucho más modular y fácil de mantener.
No es necesario decir que todos los analizadores propuestos (no los he marcado todos, pero estoy casi seguro) cumplen con una implementación de JAXP, por lo que técnicamente puedes usar todo, sin importar cuál.
fuente
Aquí hay una buena comparación en DOM, SAX, StAX y TrAX (Fuente: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )
API Type Pull, streaming Push, streaming En árbol de memoria Regla XSLT
Facilidad de uso Alto Medio Alto Medio
Capacidad XPath No No Sí Sí
CPU y memoria Buena Buena Varía Varía
Reenviar solo Sí Sí No No
Leer XML Sí Sí Sí Sí
Escribir XML Sí No Sí Sí
CRUDO No No Sí No
fuente
XML simple http://simple.sourceforge.net/ es muy fácil para (des) serializar objetos.
fuente
Además de SAX y DOM, hay un análisis STaX disponible utilizando XMLStreamReader, que es un analizador de extracción xml.
fuente
He encontrado que dom4j es la herramienta para trabajar con XML. Especialmente comparado con Xerces.
fuente
No recomendaría esto porque tienes mucho "pensamiento" en tu aplicación, pero usar XSLT podría ser mejor (y potencialmente más rápido con la compilación de XSLT a bytecode) que la manipulación de Java.
fuente
Si te importa menos el rendimiento, soy un gran admirador de Apache Digester, ya que esencialmente te permite mapear directamente desde XML a Java Beans.
De lo contrario, primero debe analizar y luego construir sus objetos.
fuente