Java解析XML : getElementsByTagName returns all elements

标签 java xml parsing dom nodelist

我有以下 xml 结构:

<node name="node1">
    <parameter name="param1" value="1" />
    <parameter name="param2" value="2" />
    <parameter name="param3" value="3" />

    <option name="opt1">
        <parameter name="opt1-p1" value="11" />
        <parameter name="opt1-p2" value="12"/>
        <parameter name="opt1-p3" value="13"/>
    </option>
</node>
... 

该文件包含多个带有多个选项的节点元素。

使用语句 getElementsByTagName

       ...
       Node nNode = nodeListSessions.item(nodeIndex);
       Element nodeElements = (Element) nNode;
       NodeList nodeListParameters = nodeElements .getElementsByTagName("parameter");
       ...  

它获取所有参数,包括来自选项内部元素的参数。

如何在节点列表(nodeListParameters)中仅接收节点元素的参数?

最佳答案

一种选择是使用简单的 XPath表达式:/node/parameter

这只会获取根级节点元素中的参数元素。您可以使用 java.xml.xpath 中提供的 XPath 类,如下所示:

XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("/node/parameter");

NodeList nodeListParameters = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

您需要将 XML doc 作为某种 InputSource对象,例如 org.w3c.dom.Document 。请参阅this answer了解更多详情。

您可以尝试并测试不同的 xpath 查询 here .

关于Java解析XML : getElementsByTagName returns all elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48883578/

相关文章:

javascript - 将超链接添加到 xml 文件中

java - 为什么转换后DocType为null?

Java文本输入: How to ignore lines starting with certain characters in them?

java - 如何开始,使用几个面板开发基于 swing 的应用程序,每个面板都有下一个按钮

android - 导航图标在工具栏中的位置

java - Xtext运行时编译

c++ - 从特定字符串中取出 double

java - 在maven项目中使用spring boot

java - JLayeredPane 中缺少 JPanel

java - 分离数据并存储在ArrayList中?