首页 > 解决方案 > 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。因此,我必须避免对子名称或父名称进行任何硬编码。

问候,菲尔

标签: javaxmldom

解决方案


要查找没有子 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]

推荐阅读