2011-06-09 2 views
5

Je dois imprimer le contenu d'un fichier xml dans un fichier txt. Voici un exemple du type de xml que je veux imprimer:obtenir des petits-enfants de xml dans 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> 

je peux obtenir toutes les informations dont j'ai besoin, à l'exception de la balise de chemin ... ce que je l'ai fait:

 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(); 

Alors, comment le diable à moi obtenir les informations de ce tag?

P.S. Ne hésitez pas à ce downvote dans l'oubli si c'est une question stupide ... tant que vous me diriger aussi vers une réponse :)

Merci

+0

Êtes-vous lié à JDom? Avez-vous considéré si XPath serait approprié pour résoudre votre problème? –

Répondre

1

Vous pouvez parcourir les paths enfants:

... 
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

cela fonctionne à merveille ... mais j'ai oublié de mentionner quelque chose de crucial. il existe plusieurs chemins d'accès en tant qu'enfants de chemins: ce que vous avez fait ici n'acquiert que le premier chemin d'accès – Aelfhere

+0

Ah, oui, mon erreur. Je vais mettre à jour ma réponse. – morja

+0

: D Vous avez oublié de mettre System.out.println ("Ho Ho Ho! Merry Xmas:"); Parce que je viens de me donner un cadeau de Noël. Lol, merci beaucoup – Aelfhere

0

Utilisez getElementsByTagName() pour obtenir l'étiquette <paths> puis l'utiliser pour obtenir ses enfants.

Oh c'est pour l'élément w3c. Pour l'élément JDOM jsut, utilisez getChild() et getChildren().

Questions connexes