0

私は基本的にここの例に従っています

http://www.mkyong.com/java/how-to-read-xml-file-in-java-jdom-example/

だから、次のようなことをするのではなく

node.getChildText("firstname")

右??

これはうまくいきます..

しかし、すべての「キー」を取得し、それを照会して値を取得する方法はありますか? json の解析と同じように..

JSONObject json = (JSONObject) parser.parse(value);
          for (Object key : json.keySet()) {
            Object val = json.get(key);
          }

キーと値をハードコーディングするのではなく?

ありがとう

Code for reference:
package org.random_scripts;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class XMLReader {
    public static void main(String[] args) {

      SAXBuilder builder = new SAXBuilder();
      File xmlFile = new File("data.xml");

      try {

        Document document = (Document) builder.build(xmlFile);
        Element rootNode = document.getRootElement();
        List list = rootNode.getChildren("staff");

        List children = rootNode.getChildren();

        System.out.println(children);

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

           Element node = (Element) list.get(i);

           System.out.println("First Name : " + node.getChildText("firstname"));
           System.out.println("Last Name : " + node.getChildText("lastname"));
           System.out.println("Nick Name : " + node.getChildText("nickname"));
           System.out.println("Salary : " + node.getChildText("salary"));

        }

      } catch (IOException io) {
        System.out.println(io.getMessage());
      } catch (JDOMException jdomex) {
        System.out.println(jdomex.getMessage());
      }
    }
}
4

2 に答える 2

1

ノードのすべての子を書き出したい場合は、次のようにすることができます。

List children = rootNode.getChildren();

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

    Element node = (Element) list.get(i);

    List dataNodes = node.getChildren();

    for (int j = 0; j < dataNodes.size(); ++j) {

        Element dataNode = (Element) dataNodes.get(j);
        System.out.println(dataNode.getName() + " : " + dataNode.getText());

    }

}

これにより、名前を知らなくてもすべての子を書き出すことができますが、唯一の欠点は、フィールドに「きれいな」名前がないことです (つまり、「名」ではなく「名」)。もちろん、JSONでも同じ制限があります.プログラムが子供が何であるかについて何らかの知識を持っていない限り、フィールドのきれいな名前を取得する簡単な方法はわかりません.避けるために。

于 2013-09-13T04:12:28.693 に答える
0

上記のコードは、タグの下の第 1 レベルの子のリストのみを提供します。例えば::

<parent>
  <child1>
    <childinternal></childinternal>
  </child1>
  <child2></child2>
</parent>

上記のコードは、child1 と child2 のみを出力します。内部ノードを詳細に出力したい場合は、再帰呼び出しを行う必要があります。

子にさらに多くのノードがあることを確認するには、 jdom apichild.getContentSize()を使用します。そのメナが 1 つより大きい場合は、より多くのノードがあります。

于 2014-05-22T13:39:16.420 に答える