2013-01-23 41 views
0

XML:JDOM的GetChildren()返回只有一个元素

<root> 
    <foz> 
     .... 
     <row> 
      <column>PD1</column> 
      <column>PD2</column> 
      <column>PD3</column> 
     </row> 
     ... 
    </foz> 
</root> 

JAVA:

 FileInputStream fin; 
     fin = new FileInputStream(zip); //zip is a File Object 
     ZipInputStream zin = new ZipInputStream(fin); 
     ZipEntry ze = null; 
     SAXBuilder builder = new SAXBuilder(); 
     Document document = (Document)builder.build(zin); 

     Element rootNode = document.getRootElement(); 
     List list = rootNode.getChildren("foz"); 

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

     List li = node.getChildren("row");  
     for (int j = 0; j < li.size(); j++){ 
      Element nodePda = (Element) li.get(j); 
      String id = nodePda.getChildTextTrim("column"); 
      ... 
     } 
     } 
     ... 

我不无为什么一句 “rootNode.getChildren(” 福斯 “);”只返回列表“li”中的一个元素,返回PD1但不返回PD2和PD3值。有谁能够帮助我?

提前致谢!

回答

1

JDOM似乎是做正确的事......在您的例子有只生一个孩子的根节点的“伊”,从而rootnode.getChildren(“福斯”)返回一个元素的列表。

然后,你拿一个foz元素,并(成功)获得所有的“行”的孩子。现在,使用每个“行”元素调用getChildText(“column”)方法。这将始终找到名为'column'的第一个子元素并返回其文本值,因此,只会得到值'PD1'。请参阅此处的文档:getChildText(String),然后在此处参考:getChild(java.lang.String)

底线是JDOM正在做您所要求的操作。

你应该做的是:

  • 升级到JDOM 2.x的 - 它会与价值的铸造帮助,这是更快,更开启O日期和更好的支持。
  • 在行Element中使用另一个循环并调用getChildren(“column”),并获取每个'column'子元素的文本。

罗尔夫

+0

不错!它正在运行。谢谢rolfl – user2003559

相关问题