我一直想知道如何阅读XML文件,但在回答之前,请阅读整篇文章。
例如我有:
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<incoming id="0" class="HelloIlikeyou" />
</messages>
我想要的是获取标签中的所有值。我想把它放在一个字典中,哪个键是传入/传出,然后它将包含一个Pair列表作为值,id值为id,值为类值。
所以我明白了:
HashMap<String, List<Pair<Integer, String>>> headers = new HashMap<>();
然后它会存储:
HashMap.get("incoming").add(new Pair<>("0", "HelloIlikeyou"));
但是我不知道怎么做,我已经有了一部分,但它不起作用:
File xml = new File(file);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xml);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("messages");
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
System.out.println("Type: " + node.getNodeValue() + " packet ID " + node.getUserData("id"));
}
答案 0 :(得分:3)
你可以使用JAXB,我认为这是最好的方法。看看这个: Jaxb tutorial
答案 1 :(得分:2)
这就是你想要的:
public static void main(final String[] args)
throws ParserConfigurationException, SAXException, IOException {
File xml = new File(file);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xml);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("messages");
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
for (int j = 0; j < node.getChildNodes().getLength(); j++) {
Node child = node.getChildNodes().item(j);
if (!child.getNodeName().equals("#text")) {
NamedNodeMap attributes = child.getAttributes();
System.out.println("Type: " + child.getNodeName()
+ " packet ID " + attributes.getNamedItem("id")
+ " - class: " + attributes.getNamedItem("class"));
}
}
}
}
这给了我以下输出:
Type: incoming packet ID id="0" - class: class="HelloIlikeyou"
答案 2 :(得分:0)
使用众多可用的库中的一个,例如XStream:
答案 3 :(得分:0)
Node node = nodes.item(i);
if (node instanceOf Element) {
Element elem = (Element)node;
String id = elem.getAttribute("id");
...
所以你几乎就在那里。 W3C课程有点古老了。