2013-01-23 65 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

相關問題