2011-06-09 21 views
5

Necesito imprimir el contenido de un archivo xml en algún archivo txt. Este es un ejemplo del tipo de XML quiero imprimir:obteniendo nietos de xml en java

<log> 
    <logentry revision="234"> 
     <author>SOMEGUY</author> 
     <date>SOME DATE</date> 
     <paths> 
      <path>asdf/asdf/adsf/asdf.zip</path> 
     </path> 
     <msg>blahblahblah</msg> 
    </logentry> 
</log> 

que puede obtener toda la información que necesito, a excepción de la etiqueta de ruta ... esto es lo que he hecho:

 FileWriter fstream = new FileWriter("c:\\work\\output.txt"); 
     BufferedWriter out = new BufferedWriter(fstream); 

     Document document = (Document) builder.build(xmlFile); 
     Element rootNode = document.getRootElement(); 
     List list = rootNode.getChildren("logentry"); 

     for (int i=0; i< list.size(); i++) { 

      Element node = (Element) list.get(i); 

      out.write("Revision: \n" + node.getAttributeValue("revision") + "\n\n"); 
      out.write("Author: \n" + node.getChildText("author") + "\n\n"); 
      out.write("Date: \n" + node.getChildText("date") + "\n\n"); 



      out.write("Message: \n" + node.getChildText("msg")); 
      out.write("\n-------------------------------------------------" 
        +"---------------------------------------------------\n\n"); 
     } 
     out.close(); 

Entonces, ¿cómo demonios recibo la información de esa etiqueta?

P.S. No dude en downvote presente en el olvido si se trata de una pregunta estúpida ... tanto tiempo como me directa también hacia una respuesta :)

Gracias

+0

¿Está ligado a jdom? ¿Has considerado si XPath sería apropiado para resolver tu problema? –

Respuesta

1

Puede iterar sobre los paths hijos:

... 
List pathsChilds = node.getChildren("paths"); 
if(pathsChilds.size() > 0){ 
    Element paths = (Element) pathsChilds.get(0); 
    List pathChilds = paths.getChildren("path"); 
    for (int j=0; j< pathChilds.size(); j++) { 
     Element path = (Element) pathChilds.get(j); 
     out.write("Path: \n" + path.getText() + "\n\n"); 
    } 
} 
+0

esto funciona maravillosamente ... pero olvidé mencionar algo crucial. hay varias etiquetas de ruta como elementos secundarios de las rutas: lo que ha hecho aquí solo captará la primera etiqueta de ruta – Aelfhere

+0

Ah, sí, mi error. Actualizaré mi respuesta. – morja

+0

: D Olvidaste poner System.out.println ("Ho Ho Ho! Merry Xmas:"); porque solo me dio un regalo de Navidad temprano. Lol, muchas gracias – Aelfhere

0

Uso getElementsByTagName() para obtener la etiqueta <paths> y luego utilizarla para conseguir sus hijos.

Oh, eso es para el elemento w3c. Para el elemento JDOM jsut use getChild() y getChildren().