0

XML:

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

爪哇:

      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("foz");” 仅返回列表“li”中的一个元素,返回 PD1 但不返回 PD2 和 PD3 值。有谁能够帮我?

提前致谢!

4

1 回答 1

1

JDOM 似乎在做正确的事情...在您的示例,根节点只有一个子“foz”,因此 rootnode.getChildren("foz") 返回一个元素的列表。

然后,您使用那个 foz Element,并(成功地)获得所有“行”子项。现在,对于每个“行”元素,您调用 getChildText("column") 方法。这将始终找到名为“column”的第一个子元素并返回其文本值,因此,您仅获得值“PD1”。在这里查看它的文档:getChildText(String)反过来在这里引用:getChild(java.lang.String)

底线是 JDOM 正在做你要求它做的事情。

你应该做的是:

  • 升级到 JDOM 2.x - 这将有助于值的转换,而且它更快、更新更多,并且得到更好的支持。
  • 在行元素内使用另一个循环并调用 getChildren("column"),并获取每个“列”子元素的文本。

罗尔夫

于 2013-01-23T11:38:33.103 回答