java - getElementsByTagName 向下搜索所有级别的 XML 节点

标签 java xml dom xpath

我有这个 XML 文件:

<root>
    <node1>
        <name>A</name>
        <node2>
            <name>B</name>
            <node3>
                <name>C</name>
                <number>001</number>
            </node3>
        </node2>
    </node1>
</root>

我正在解析文件,以获取每个节点的名称,以及相应的编号(如果存在)。

我使用:

String number = eElement.getElementsByTagName("number").item(0).getTextContent();

这应该给我这样的东西:

Name | Number
A    | 
B    |
C    | 001

但是我得到:

Name | Number
A    | 001
B    | 001
C    | 001

所以,我认为 getElementsByTagName("Number") 正在寻找一个节点的所有子节点中的数字节点。我不想要那个。有人知道解决方法吗?

我想过用XPath代替上面的方法,但我真的很想知道是否有现成的方法。谢谢

最佳答案

您可以使用 JDK/JRE 中的 javax.xml.xpath API 来更好地控制通过 getElementsByTagName 返回的 XML。

import java.io.File;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
        Document document = docBuilder.parse(new File("filename.xml"));

        XPathFactory xpathFactory = XPathFactory.newInstance();
        XPath xpath = xpathFactory.newXPath();
        Element element = (Element) xpath.evaluate("//node3/name", document, XPathConstants.NODE);
    }

}

关于java - getElementsByTagName 向下搜索所有级别的 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932570/

相关文章:

xml - XSLT 从 XML 输出 html 标签

java - 如何使用命令行创建小型maven项目

javascript - 在 JavaScript (DOM) 中处理 XML 命名空间

java - 从正则表达式获取数字

xml - 在使用EventReader进行迭代时,如何获取事件的位置?

java - JPanel 中的图片

javascript - 向前和向后浏览时 AJAX 事件消失

html - 如何设置 div 元素的样式以形成表格

java - Spring Security 两种角色实现

java - 多线程 : java condition await timeout but can't return