JAVA element.getElementsByTagName Restrict to Top Level

2022-09-02 03:56:08

我有一个XML文件,如下所示:

<rootNode>
    <link>http://rootlink/</link>
    <image>
        <link>http://imagelink/</link>
        <title>This is the title</title>
    </image>
</rootNode>

使用 DOM 的 XML Java 代码如下所示:

NodeList rootNodeList = element.getElementsByTagName("link");

这将为我提供所有“链接”元素,包括顶级和“图像”节点内的元素。

有没有办法在一个级别中获取rootNode的“链接”标签,而不是像图像链接那样的两个级别?也就是说,我只想要 http://rootlink/“链接”。


答案 1

您可以使用 XPath

XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
NodeList links = (NodeList) xpath.evaluate("rootNode/link", element,
    XPathConstants.NODESET);

答案 2

我也找不到任何方法来做到这一点,所以我写了这个帮助程序函数,

 public static List<Element> getChildrenByTagName(Element parent, String name) {
    List<Element> nodeList = new ArrayList<Element>();
    for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling()) {
      if (child.getNodeType() == Node.ELEMENT_NODE && 
          name.equals(child.getNodeName())) {
        nodeList.add((Element) child);
      }
    }

    return nodeList;
  }