我基本上遵循这里的例子
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());
}
}
}
答案 0 :(得分: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中也有同样的限制 - 我不知道一个简单的方法来获得字段的漂亮名称,除非你的程序知道孩子们是什么,这是你似乎在尝试的事情避免。
答案 1 :(得分:0)
以上代码仅提供标记下的第一级子项列表。 例如::
<parent>
<child1>
<childinternal></childinternal>
</child1>
<child2></child2>
</parent>
上面的代码只打印child1和child2,如果你想打印深度的内部节点,你必须进行递归调用。
要查找一个孩子,其中有更多节点使用,jdom api child.getContentSize()
,如果它的大于1,那么它有更多的节点。