parseo - Mejor analizador de XML para Java
parseo de xml en java (8)
Además de SAX y DOM, está disponible el análisis de STaX utilizando XMLStreamReader, que es un analizador xml pull.
Necesito leer archivos XML pequeños (algunos MB a lo sumo, codificados en UTF-8), hurgar en torno a varios elementos y atributos, quizás modificar algunos y escribir el XML de nuevo en el disco (preferiblemente con un formato agradable y con sangría) .
¿Cuál sería el mejor analizador XML para mis necesidades? Hay muchos para elegir. Algunos de los que soy consciente son:
Y, por supuesto, la del JDK (estoy usando Java 6). Estoy familiarizado con Xerces pero lo encuentro torpe.
Recomendaciones?
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 )
Característica StAX SAX DOM TrAX
API Tipo Pull, streaming Push, streaming In memory tree XSLT Rule
Facilidad de uso Alto Medio Alto Medio
Capacidad XPath No No Sí Sí
CPU y memoria Buena Buena Varía Varía
Sólo adelante Sí Sí No No
Leer XML Sí Sí Sí Sí
Escribir XML Sí No Sí Sí
CRUD No No Sí No
Creo que no deberías considerar ninguna implementación específica del analizador. La API de Java para el procesamiento XML le permite utilizar cualquier implementación de analizador conforme de una 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 se ha vuelto demasiado viejo, 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 una manera estándar:
- SAX Esta es la API más simple. Usted lee el XML definiendo una clase de manejador que recibe los datos dentro de los elementos / atributos cuando el XML se procesa de manera serial. Es más rápido y sencillo si solo planea leer algunos atributos / elementos y / o escribir algunos valores (su caso).
- DOM Este método crea un árbol de objetos que le permite modificarlo / acceder a él de forma aleatoria, por lo que es mejor para la manipulación y el manejo complejos de XML.
- StAX Esto está en el medio de la ruta entre SAX y DOM. Simplemente escriba el código para extraer los datos del analizador en el que está interesado cuando se procesa.
Olvídese de las API propietarias, como las de JDOM o Apache (es decir, Apache Xerces XMLSerializer ), ya que lo vinculará a una implementación específica que puede evolucionar en el tiempo o perder la compatibilidad hacia atrás, lo que le hará cambiar su código en el futuro cuando desee actualizar a una nueva versión de JDOM o cualquier analizador que uses. Si se adhiere a la API estándar de Java (utilizando 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 comprobado todos, pero estoy casi seguro) cumplen con una implementación de JAXP, por lo que técnicamente se pueden usar todos, sin importar cuál sea.
He encontrado que dom4j es la herramienta para trabajar con XML. Especialmente en comparación con Xerces.
No recomendaría esto, ya que tienes mucho "pensamiento" en tu aplicación, pero el uso de 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.
Si le importa menos el rendimiento, soy un gran fanático de Apache Digester, ya que esencialmente le permite mapear directamente desde XML a Java Beans.
De lo contrario, primero debe analizar y luego construir sus objetos.
XML simple http://simple.sourceforge.net/ es muy fácil para (des) serializar objetos.
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 tiene que escribir más código para hacer las cosas y debe acostumbrarse a procesar XML en secuencias.