programa - ¿Qué biblioteca Java XML recomienda(para reemplazar dom4j)?
libreria xml (11)
Estoy buscando algo como dom4j, pero sin las verrugas de dom4j, como la documentación incorrecta o faltante y el estado de desarrollo aparentemente estancado.
Antecedentes: he estado usando and advocating dom4j, pero no me siento completamente al respecto porque sé que la biblioteca dista mucho de ser óptima (ejemplo: vea cómo se documentan los métodos en la clase de Stylesheet relacionada con XSLT, qué pasaría para ejecutarlo ( ) como el parámetro del String mode
?)
Requisitos: la biblioteca debe hacer que el manejo básico de XML sea más fácil que cuando se using paquetes puros JDK ( javax.xml
y org.w3c.dom
). Cosas como esta:
- Lea un documento XML (desde archivo o cadena) en un objeto, recorra y manipule fácilmente el DOM, realice consultas XPath y ejecute XSLT contra él.
- Cree un documento XML en su código Java, agregue elementos y atributos y datos, y finalmente escriba el documento en un archivo o String.
Realmente me gusta lo que dom4j promete , en realidad: " biblioteca de código abierto fácil de usar para trabajar con XML, XPath y XSLT [...] con soporte completo para DOM, SAX y JAXP. " Y el próximo dom4j 2.0 afirma arreglar todo : utilice completamente Java 5 y agregue la documentación faltante. Pero desafortunadamente, si miras más de cerca :
Advertencia: dom4j 2.0 está en etapa pre-alfa. Es probable que no se pueda compilar. En caso de que pueda compilarse al azar, es probable que no pueda ejecutarse. En caso de que se ejecute ocasionalmente, puede explotar repentinamente. Si quiere usar dom4j, quiere la versión 1.6.1. De Verdad.
... y el sitio web lo ha dicho durante mucho tiempo. Entonces, ¿hay una buena alternativa para dom4j? Proporcione alguna justificación para su biblioteca preferida, en lugar de simplemente eliminar nombres y enlaces. :-)
A veces uso Jericho , que es principalmente un analizador de HTML, pero puedo analizar cualquier estructura similar a XML.
Por supuesto, es solo para las operaciones XML más simples, como encontrar etiquetas con nombre de pila, iterar a través de la estructura, reemplazar etiquetas y sus atributos, pero ¿no es este el caso más utilizado?
Agregaré a la respuesta incorporada de @kdgregory diciendo por qué no JAXB?
Con algunas anotaciones es bastante fácil modelar la mayoría de los documentos XML. Quiero decir que probablemente vas a analizar las cosas y poner un objeto ¿verdad?
JAXB 2.0 está integrado en JDK 1.6 y, a diferencia de muchas otras bibliotecas javax incorporadas, este es bastante bueno (Kohusuke trabajó en él para que sepas que es bueno).
Claro, http://www.xom.nu/ :-)
XOM está diseñado para ser fácil de aprender y fácil de usar. Funciona de manera muy directa y tiene una curva de aprendizaje muy superficial. Asumiendo que ya está familiarizado con XML, debería ser capaz de comenzar a trabajar con XOM muy rápidamente.
Uso XOM desde hace varios años y todavía me gusta mucho. Fácil de usar, con mucha documentación y artículos en la web, API no cambia entre lanzamientos. 1.2 fue lanzado recientemente.
XOM es la única API XML que no compromete la corrección. XOM solo acepta documentos XML bien formados en el espacio de nombres, y solo le permite crear documentos XML bien formados en el espacio de nombres. (De hecho, es un poco más estricto que eso: en realidad garantiza que todos los documentos son de ida y vuelta y tienen infosets XML bien definidos.) XOM administra su XML para que usted no tenga que hacerlo. Con XOM, puede concentrarse en el valor único de su aplicación y confiar en que XOM obtenga el XML correcto.
Echa un vistazo a la página web http://www.xom.nu/ para preguntas frecuentes, libro de cocina, fundamentos del diseño, etc. Si solo todo fue diseñado con tanto amor :-)
El autor también escribió sobre lo que está mal con las API XML (y cómo solucionarlas) . (Básicamente, razones por las cuales XOM existe en primer lugar)
Aquí también hay una entrevista en cinco partes con Artima sobre XOM, donde hablan sobre lo que está mal con XML APIs , The Good, the Bad y DOM , una revisión de diseño de JDOM , lecciones aprendidas de JDOM y finalmente Design Principles y XOM .
En nuestro proyecto estamos usando http://www.castor.org/ pero solo para pequeños archivos XML. Es realmente fácil de aprender, solo necesita un archivo XML de asignación (o ninguno si las etiquetas XML coinciden perfectamente con los atributos de clase) y listo. Admite oyentes (como devoluciones de llamada) para realizar un procesamiento adicional. Los contras: no es un estándar Java EE como JAXB.
En un proyecto reciente tuve que hacer algunos análisis XML, y terminé usando Simple Framework , recomendado por un colega.
Yo estaba bastante feliz con eso al final. Utiliza un enfoque basado en anotaciones para asignar elementos y atributos XML a clases y campos de Java.
<example>
<a>
<b>
<x>foo</x>
</b>
<b>
<y>bar</y>
</b>
</a>
</example>
Código correspondiente de Java:
@Root
public class Example {
@Path("a/b[1]")
@Element
private String x;
@Path("a/b[2]")
@Element
private String y;
}
Es todo bastante diferente de dom4j o XOM. Evita escribir código de manejo XML tonto y repetitivo, pero al principio probablemente te golpees la cabeza contra la pared por un rato tratando de obtener las anotaciones correctas.
(Fui yo quien hizo esta pregunta hace 4 años. Aunque XOM parece un reemplazo de dom4j decente y bastante popular, no he llegado a abrazarlo por completo. Es curioso que nadie haya mencionado Simple Framework aquí. Decidí arreglarlo, como probablemente lo usaría de nuevo.)
He estado usando XMLTool para reemplazar Dom4j y está funcionando bastante bien.
La herramienta XML utiliza un patrón de interfaz fluida para facilitar las manipulaciones de XML:
XMLTag tag = XMLDoc.newDocument(false)
.addDefaultNamespace("http://www.w3.org/2002/06/xhtml2/")
.addNamespace("wicket", "http://wicket.sourceforge.net/wicket-1.0")
.addRoot("html")
.addTag("wicket:border")
.gotoRoot().addTag("head")
.addNamespace("other", "http://other-ns.com")
.gotoRoot().addTag("other:foo");
System.out.println(tag.toString());
Está hecho para Java 5 y es fácil crear un objeto iterable sobre los elementos seleccionados:
for (XMLTag xmlTag : tag.getChilds()) {
System.out.println(xmlTag.getCurrentTagName());
}
Siempre me ha gustado jdom . Fue escrito para ser más intuitivo que el análisis DOM (y el análisis SAX siempre parece torpe de todos modos).
De la declaración de misión:
No hay una razón convincente para que una API de Java para manipular XML sea compleja, engañosa, poco intuitiva o una molestia en el cuello. JDOMTM está tanto centrado en Java como optimizado para Java. Se comporta como Java, usa colecciones de Java, es una API completamente natural para los desarrolladores de Java actuales, y proporciona un punto de entrada de bajo costo para usar XML.
Esa es prácticamente mi experiencia: navegación bastante intuitiva de árboles de nodos.
Uso XStream , es una biblioteca simple para serializar objetos a XML y viceversa.
puede ser annotation-driven (como JAXB), pero tiene una API muy simple y fácil de usar e incluso puede generar JSON.
puede probar JAXB, con anotaciones es muy práctico y simple de hacer: Arquitectura Java para Enlace XML.
El integrado en el JDK ... con algunas adiciones.
Sí, es doloroso de usar: está modelado según las especificaciones del W3C que fueron claramente diseñadas por el comité. Sin embargo, está disponible en cualquier lugar, y si se establece en él no se encontrará con los argumentos "Me gusta Dom4J", "Me gusta JDOM", "Me gusta StringBuffer" que provienen de bibliotecas de terceros. Especialmente dado que tales argumentos pueden convertirse en diferentes pedazos de código usando diferentes bibliotecas ...
Sin embargo, como dije, realizo un poco de mejora: la biblioteca Practical XML es una colección de clases de utilidad que facilita el trabajo con el DOM . Aparte del contenedor XPath, no hay nada complejo aquí, solo un conjunto de rutinas que me encontré reescribiendo para cada trabajo.