【问题标题】:Java DOM: Get all parents listJava DOM:获取所有父母列表
【发布时间】:2020-01-21 09:34:44
【问题描述】:

我需要列出至少包含一个孩子的所有元素。例如,在下面的 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。因此,我必须避免对子名称或父名称进行任何硬编码。

问候, 菲尔

【问题讨论】:

  • &lt;/Doc&gt; 在 xml 的底部丢失?
  • 您的规则似乎错误或不完整。当您的条件是at least one child。为什么不&lt;G_GT&gt;
  • G_GT 没有字段。它仅包含具有更多字段的 T。我需要 T 但不需要 G_GT
  • T 的字段 Key 和 F3 没有任何子项,因此我需要他们的父项,即 T。因为 G_GT 没有任何无子项字段,即包含诸如 之类的值的字段2,我不需要G_GT
  • 你检查我的答案了吗?对你起作用吗?如果不是,有什么问题?

标签: java xml dom


【解决方案1】:

要查找没有子 ELEMENT_NODE 的 ELEMENT_NODE 的父 ELEMENT_NODE,您可以从以下 sn-p 开始

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]

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多