我需要解析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: ...
...
答案 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);
}
}
}