java - Java DOM:获取所有父母列表
问题描述
我需要列出所有包含至少一个孩子的元素。例如,在下面的 XML 中,H,I,T 至少有一个子字段。我只需要列出 H、I、T 并忽略其他父母,例如 G_GT、Rec 等。
<?xml version="1.0" encoding="UTF-8"?>
<Doc>
<Rec>
<H>
<Key>H</Key>
<F1>1</F1>
<I>
<Key>I</Key>
<F2>08</F2>
<G_GT>
<T>
<Key>T</Key>
<F3>1</F3>
</T>
<T>
<Key>T</Key>
<F3>2</F3>
</T>
</G_GT>
</I>
</H>
</Rec>
</Doc>
代码应将输出作为H,I,T。我正在使用 DOM 解析器处理 Java。谁能建议如何使用 DOM 在 Java 中执行此操作?我不能使用 getElementByTagName 等函数,因为我可以获得具有不同父子名称的 XML。因此,我必须避免对子名称或父名称进行任何硬编码。
问候,菲尔
解决方案
要查找没有子 ELEMENT_NODE 的 ELEMENT_NODE 的父 ELEMENT_NODE,您可以从以下代码段开始
NodeList elements = document.getElementsByTagName("*");
Set<String> nodesNames = new LinkedHashSet<>();
for (int i = 0; i < elements.getLength(); i++) {
Node node = elements.item(i);
NodeList nodeList = node.getChildNodes();
for (int j = 0; j < nodeList.getLength(); j++) {
Node currentNode = nodeList.item(j);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
nodesNames.add(node.getParentNode().getNodeName());
break;
}
}
}
System.out.println("nodesNames = " + nodesNames);
会产生输出
[H, I, T]
推荐阅读
- clojure - Clojure 中前 200 个数字的总和?
- django - Django LOGGING 异常处理
- amazon-web-services - AWS 角色策略:Terraform:创建 IAM 角色时出错。MalformedPolicyDocument:已禁止字段资源
- flutter - 在 Flutter 应用中使用现有的 sqlite 数据库
- c++ - g++ (gcc) 11 可以在 Debian Bullseye 上使用吗?
- c++ - 如何编写 CMakeLists.txt 以添加 /include 子目录和 /library 子目录中的头文件和外部库
- java - 如何在 tomcat 服务器上解析 JSP 中的 UTF-8 编码?
- sfdc - 字段依赖项中的多选项列表-salesforce
- javascript - 我可以在没有 if/else 的情况下使用 Vue.js 制作 3 种错误类型吗?
- javascript - 无法读取未定义的属性“classList”