3

XML ファイルの読み取り方法について疑問に思っていましたが、回答する前に投稿全体をお読みください。

たとえば、私は持っています:

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

<messages>

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

</messages>

私が望むのは、 tag からすべての値を取得することです。キーが着信/発信である辞書に配置したい場合、値としてペアのリストが含まれ、キーとして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 に答える