我有以下 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/