Java解析XML:getElementsByTagName返回所有元素
我有以下xml结构: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"
<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);
您需要将XMLdoc
作为某种对象,例如。有关更多详细信息,请参阅
您可以尝试和测试不同的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")) {
... }