Java解析XML:getElementsByTagName返回所有元素

问题描述 投票:1回答:2

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

该文件包含多个具有多个选项的nodeElements。

使用语句getElementsByTagName

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

它获取所有参数,包括选项inner-elements中的参数。

我怎样才能在nodelist(nodeListParameters)中只接收node element的参数?

java xml parsing dom nodelist
2个回答
2
投票

一种选择是使用简单的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


0
投票

我发现一个简单的解决方案是检查父节点是否是“选项”或“节点”,例如

if ((element.getNodeName() == "parameter") & (element.getParentNode().getNodeName()== "node")) {
... }

if ((element.getNodeName() == "parameter") & (element.getParentNode().getNodeName()== "option")) {
... }
© www.soinside.com 2019 - 2024. All rights reserved.