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

Java解析XML:getElementsByTagName返回所有元素,java,xml,parsing,dom,nodelist,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"

我有以下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>
... 
它获取所有参数,包括来自选项内部元素的参数


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

一个选项是使用一个简单的表达式:
/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
作为某种对象,例如。有关更多详细信息,请参阅


您可以尝试和测试不同的xpath查询。

我发现的一个简单解决方案是检查父节点是“option”还是“node” e、 g


我不想使用xpath,只想使用DOM。
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("/node/parameter");

NodeList nodeListParameters = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
if ((element.getNodeName() == "parameter") & (element.getParentNode().getNodeName()== "node")) {
... }

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