2011-06-09 88 views
5

我需要将xml文件的内容打印到某个txt文件中。下面是XML类型的样品,我想打印出:从java中的XML获取孙子

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

我能得到我所需要的,除了路径标签的所有信息......这是我做了什么:

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

那么,我如何从这个标签获取信息?

P.S.随意downvote被遗忘这一点,如果这是一个愚蠢的问题...只要你也可直接向我的答案:)

感谢

+0

你绑JDOM?你有没有考虑XPath是否适合解决你的问题? – 2011-06-09 20:06:48

回答

1

您可以遍历paths孩子:

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

这个功能奇妙...但我忘了提到一些至关重要的东西。 有多个路径的标签,路径孩子: 你在这里做什么,只会抢第一路径标签 – Aelfhere 2011-06-09 20:16:36

+0

啊,是的,我的错误。我会更新我的答案。 – morja 2011-06-09 20:21:38

+0

:D你忘了把System.out.println(“Ho Ho Ho!Merry Xmas:”); cuz刚给了我一个早期的圣诞礼物。大声笑,非常感谢 – Aelfhere 2011-06-09 20:36:08

0

使用getElementsByTagName()得到<paths>标记,然后用它来获得它的孩子。

哦,这是为w3c元素。对于JDOM元素,请使用getChild()getChildren()