2009-11-02 27 views
11

he estado haciendo un poco de XML simple de procesamiento en Python y crecido como la manera de hacer las cosas ElementTree.xml.etree.ElementTree equivalente en Java

¿Hay algo similar y tan fácil de usar en Java? Encuentro que el modelo DOM es un poco engorroso y me encuentro escribiendo mucho más código de lo que me gustaría hacer cosas simples.

O estoy pidiendo algo equivocado?

Tal vez mi pregunta es: ¿Hay una mejor opción que las "clases" XMLUtils que veo la gente implementación en algunos lugares para simplificar su código cuando se trata de DOM?


Agregando un pedacito aquí sobre por qué me gusta ElementTree ya que la pregunta fue hecha.

  • Simplicidad (supongo que cualquier cosa parece sencilla después de trabajar con DOM sin embargo)
  • Se siente como un paso natural en Python
  • requiere muy poco código de mi parte.

Estoy tratando de encontrar un ejemplo de código simple para ilustrar, pero es un poco difícil dar un buen ejemplo. Aquí hay un intento. Esto simplemente agrega una etiqueta con un valor y un atributo a una cadena xml existente.

from xml.etree.ElementTree import * 
xml_string = '<top><sub a="x"></sub></top>' 
parsed = fromstring(xmlstring) 
se = SubElement(parsed, "tag") 
se.text = "value" 
se.attrib["a"] = "x" 
new_xml_string = tostring(parsed) 

Después de eso, el new_xml_string es

<top><sub a="x" /><tag a="x">value</tag></top> 
No

un ejemplo que realmente cubre todo, pero aún así. También está el simple bucle de etiquetas cuando desea hacer cosas, pruebas fáciles de presencia de etiquetas y atributos y otras cosas.

+1

Gracias por el consejo chicos. Empezaré echando un vistazo a XOM y veré si es lo correcto para mí. –

Respuesta

6

Para ser sinceros, todas las API XML en Java chupan, que sólo puede variar el nivel de Suckage usted se empuja dentro de la cual puede resultar terrible/lento a veces manejables/decentes incluso sorprendentemente bien en.

Esto se deriva todo su mayoría del hecho de que las API de Java tratar de ser lo más W3C DOM compatible como sea posible, de hecho Xerces (corriente de solución XML nativo de Java) se enorgullece de ser compatible con un montón de especificaciones del W3C relacionadas con XML como puedes ver desde su página principal.

El API actual Xerces es muy desagradable para trabajar, sin embargo, y debido a que varias otras bibliotecas de Java XML han aparecido a lo largo de los años. Actualmente más populares son

  • JDOM, simplifica las operaciones DOM mucho y me atrevo a decir, incluso agradable, a veces, funciona como un encanto cuando se mezcla con Jaxen - así, a menos que se golpea this problem with namespaces.
  • XOM que tiene una maravillosa presentación sobre lo que está mal con XML de Java en este momento y la forma en que proponen su forma de hacer las cosas como una solución. En parte, es mejor que JDOM, pero aún no está lo suficientemente extendido, por lo que no puede decir cómo se comporta en el mundo real. Definitivamente vale la pena un cheque.
  • dom4j, biblioteca bien redondeado, es compatible con todo tipo de características importantes y juega como una solución con los pies en la tierra para XML. dom4j es básicamente la opción "vieja, probada y confiable" de los populares.

Por último pero definitivamente no menos importante Sólo tengo que mencionar StAX simplemente porque es diferente, en realidad es una API de transmisión por eventos para XML. Definitivamente vale la pena mirar solo por curiosidad.

PS. Actualmente estoy escribiendo mi propio analizador/analizador XML como ejercicio, pero aún no he decidido qué tipo de API tendrá. Realmente pretendo una facilidad de uso que parece ser bastante rara en las API XML de Java hasta ahora, pero no estoy completamente seguro de qué tipo de API voy a proporcionar. El ElementTree de Python parece interesante, pero como no estoy completamente familiarizado con él, ¿te gustaría quizás dar un breve resumen sobre qué es exactamente lo que te parece divertido?

+0

Editado la pregunta, ya que estoy seguro de que no podría haber cabido todo aquí. –

+0

Gracias por agregar el ejemplo, prometo tenerlo en cuenta al hacer mi API XML. Voy a comentar tu pregunta cuando haya terminado (en un mes más o menos, solo me paso los fines de semana codificando mis propias cosas) para que puedas probarlo. – Esko

+0

Las API de Java para XML realmente apestan. Con la excepción de jaxb es increíble lo malos que son. – jeremyjjbrown

1

Usted puede mirar en las siguientes alternativas:

dom4j

xom

jdom

Dado que nunca he usado elementtree No sé wich es el más cercano. Si puede utilizar maravilloso dentro de su proyecto, que ofrece un conjunto de clases que ayuda mucho al procesar XML.

1

Encontramos XOM (http://www.xom.nu) para proporcionar la funcionalidad del elemento subclases sencilla.