Java XML阅读

时间:2013-06-27 14:54:52

标签: java xml

我一直想知道如何阅读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"));    
            }

4 个答案:

答案 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:

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

答案 3 :(得分:0)

Node node = nodes.item(i);
if (node instanceOf Element) {
    Element elem = (Element)node;
    String id = elem.getAttribute("id");
    ...

所以你几乎就在那里。 W3C课程有点古老了。