Java,如何使用XML文件中的特定参数获取元素中元素的节点

时间:2018-04-04 08:46:35

标签: java xml dom

我需要解析XML文件,输出。我知道如何处理最简单的,但我不知道如果使用DOM解析器在其他元素中有未知数量的元素,该怎么做。示例:

<server>
    <users id="1">
        <no id="106">
            <name>Pat</name>
            <email>p@exemple.com</email>
        </no>
        <no id="554">
            <name>Bon</name>
            <email>b@example.com</email>
        </no>
    </users>
    <users id="2">
        <no id="612">
            ...
            ...

我知道如何打印所有&#39; no&#39;元素,但我必须将它们分开。主要是,我必须在输出中指定用户&#39;元素这些&#39; no&#39;元素属于。 也许有一种方法可以使用指定的参数计算另一个元素中包含的元素(&#39; id&#39;在&#39; users&#39;中)。谢谢。

实际上,我想输出:

Root Element: server

Pack of users: 1

Current Element: no
User no: 106
Name: Pat
E-mail: p@exemple.com

Current Element: no
User no: 554
Name: Bon
E-mail: b@exemple.com

Pack of users: 2
User no: 612
Name: ...
...

1 个答案:

答案 0 :(得分:0)

只需将未知数量的元素分配给List<Node>变量并迭代它:

import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

class Users {
    public static void main (String... args) {
        try {
            Document dom = new SAXReader().read(new File(args[0]));
            System.out.println("Root element: server\n");
            List<Node> packs = dom.selectNodes("/server/users");
            for (Node pack : packs) {
                System.out.println("Pack of users: " + pack.valueOf("@id") + "\n");
                List<Node> users = pack.selectNodes("no");
                for (Node user : users) {
                    System.out.println("Current element: no");
                    System.out.println("User no: " + user.valueOf("@id"));
                    System.out.println("Name: " + user.valueOf("name"));
                    System.out.println("E-mail: " + user.valueOf("email") + "\n");
                }
            }
        } catch (Throwable e) {
            System.out.println(e);
        }
    }
}