2010-04-22 9 views
5

Hay muchas preguntas que pregunta a la mejor intérprete XML, estoy más interesado en lo que es el analizador XML que es el más maravilloso como para Java?Una mejor manera de hacerlo XML en Java

Quiero:

SomeApiDefinedObject o = parseXml(xml); 
for(SomeApiDefinedObject it : o.getChildren()) { 
    System.out.println(it.getAttributes()); 
} 

Las cosas más importantes son que no quiero crear una clasepara cada tipo de nodo XML, que en lugar acababa de hacer frente a todos ellos como cadenas, y que la construcción del XML no requiere ningún convertidores o nada, sólo un simple objeto que ya está definido

Si ha utilizado el analizador XML maravilloso, usted sabrá lo que estoy hablando de

Alternativamente, wou ¿Será mejor para mí usar Groovy de Java?

+0

@jboyd: usted dice que no quiere crear objetos ... Si la velocidad y la memoria son una preocupación y la validación es ** no ** una preocupación, entonces el proyecto Javolution tiene un analizador XML "en tiempo real" en tiempo real (no sé nada al respecto, solo que es similar a Stax y que su enfoque es la velocidad, bajo huella y muy poca creación de objetos). – SyntaxT3rr0r

+1

Me pregunto si Java-Land tiene algo similar al poder de LINQ-TO-XML? – ChaosPandion

+0

@WizardOfOdds: me parece que realmente quiso decir "clase" cuando escribió "objeto". –

Respuesta

4

Aquí es algo rápido que puede hacer con Sun Java Streaming XML Parser

FileInputStream xmlStream = new FileInputStream(new File("myxml.xml")); 
    XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(xmlStream); 
    while(reader.hasNext()){ 
     reader.next(); 
     for(int i=0; i < reader.getAttributeCount(); i++) { 
      System.out.println(reader.getAttributeName(i) + "=" + reader.getAttributeValue(i)); 
     } 
    } 
+0

Además, no se puede obtener una sintaxis exacta como Groovy en Java. Entonces, use una API más simple o use Groovy iself. –

+0

Esto es útil, pero no es exactamente lo que quiero, el problema es que el XML que voy a recuperar es complicado, pero solo necesito una pequeña parte de él ... así que no quiero tener que duplicar la heiarchy XML en código java, quiero que lo haga mágicamente, tal vez usando mapas con nombres – walnutmon

+0

@jboyd: en realidad, esta es una de las pocas respuestas aquí en las que de hecho * no * tiene que reflejar la jerarquía XML en código Java. Los míos (y los inexplicablemente eliminados de Brian) son los otros. Estos funcionan bastante exactamente como su código "Yo quiero". –

0

recomiendo altamente JAXB. Ideal para XML < -> Marco de objetos Java.

0

Solía ​​haber un analizador XML muy pequeño y simple llamado NanoXML. Parece que ya no está desarrollado, pero todavía está disponible en http://devkix.com/nanoxml.php

0

Tengo buenas experiencias con XStream. Es bastante rápido y serializará y deserializará Java hacia/desde XML sin esquema y con muy poco código It Just Works ™. Las jerarquías de objetos Java que construye reflejarán directamente su XML.

+0

Así que es exactamente lo que él * no * quiere ... –

0

Trabajo con Dozer y Castor para obtener OTOM (Object to Object Mapping).

1

Parece que lo que quieres es un simple API DOM, como proporcionada por dom4j. En realidad, ya hay una DOM API en la Biblioteca estándar (los paquetes org.w3c.dom), pero es solo la API, por lo que necesita una implementación por separado; podría usar algo un poco más avanzado como dom4j.

1

Usar Groovy.

Parece que su objetivo principal es ser capaz de acceder al DOM de una manera "natural" a través de descriptores de acceso de objetos y Java no le permitirá hacer esto sin la definición de clases. Groovy, porque es "pato mecanografiado", te permitirá hacer esto.

La única razón para no usar Groovy es si (1) el procesamiento XML es una parte muy pequeña de su aplicación y/o (2) tiene que trabajar con otras personas que deseen programar estrictamente en Java.

Hagas lo que hagas, no hagas decide "simplemente tratar con todas ellas como cadenas". XML no es un formato simple, y a menos que conozca las especificaciones por dentro y por fuera, no es probable que lo haga bien. Lo que significa que su XML será rechazado por los analizadores conformes con la especificación.

3

Me gustaría poder conectar sin pudor la pequeña biblioteca de código abierto que he escrito para hacer análisis XML en Java una brisa.

Echa un vistazo a Jinq2XML.

http://code.google.com/p/jinq2xml/

un código de ejemplo se vería así:

Jocument joc = Jocument.load(urlOrStreamOrFileName); 
joc.single("root").children().each(new Action() { 
    public void act(Jode j){ 
     System.out.println(j.name() + ": " + j.value()); 
    } 
}); 
+0

¡esto se ve muy bien! gracias por compartir – boreas

+0

¿todavía es solo para leer xml? ¿tiene una versión que puede operar el documento xml como agregar un atributo a un elemento? – boreas

+0

@boreas lo siento, pero todavía solo tiene capacidades de lectura. – jjnguy

Cuestiones relacionadas