JDOM getchildren()只返回一个元素

时间:2013-01-23 10:59:41

标签: java element jdom

XML:

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

提前感谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

你应该做的是:

  • 升级到JDOM 2.x - 它将有助于构建值,它更快,更新,更好地支持。
  • 在行Element中使用另一个循环并调用getChildren(“column”),并获取每个'column'子元素的文本。

罗尔夫