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" の 1 つの要素のみを返し、PD1 を返しますが、PD2 と PD3 の値は返しません。誰でも私を助けることができますか?

よろしくお願いします!

4

1 に答える 1

1

JDOMは正しいことをしているようです...あなたの例で、ルートノードの子「foz」が1つしかないため、 rootnode.getChildren("foz") は1つの要素のリストを返します。

次に、その 1 つの foz 要素を取得し、(成功して) すべての「行」の子を取得します。ここで、「row」要素ごとに getChildText("column") メソッドを呼び出します。これは常に「column」という最初の子要素を見つけ、そのテキスト値を返すため、値「PD1」のみを取得します。ここでそのドキュメントを参照してください: getChildText(String)これは次にここを参照します: getChild(java.lang.String)

要するに、JDOM はあなたが要求したことを実行しているということです。

あなたがすべきことは次のとおりです。

  • JDOM 2.x にアップグレードしてください - 値のキャストに役立ち、より高速で、より最新で、より適切にサポートされています。
  • 行エレメント内で別のループを使用して getChildren("column") を呼び出し、各「列」子エレメントのテキストを取得します。

ロルフ

于 2013-01-23T11:38:33.103 に答える