3

我一直想知道如何读取 XML 文件,但在您回答之前,请阅读整篇文章。

例如我有:

<?xml version="1.0" encoding="UTF-8"?>

<messages>

<incoming id="0" class="HelloIlikeyou" />

</messages>

我想要的是从标签中获取所有值。我想把它放在一个字典中,哪个键是传入/传出的,然后它将包含一个 Pair 列表作为值,键是 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"));    
            }
4

4 回答 4

3

您可以使用 JAXB,我认为这是最好的方法。看看这个: Jaxb 教程

于 2013-06-27T14:59:15.740 回答
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"
于 2013-06-27T15:11:48.723 回答
0
Node node = nodes.item(i);
if (node instanceOf Element) {
    Element elem = (Element)node;
    String id = elem.getAttribute("id");
    ...

所以你几乎就在那里。W3C 类有点过时。

于 2013-06-27T15:00:59.193 回答
0

使用可以为您执行此操作的众多可用库之一,例如 XStream:

http://x-stream.github.io/

于 2013-06-27T14:56:57.547 回答