我有以下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?
的参数答案 0 :(得分: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。
答案 1 :(得分:0)
我发现一个简单的解决方案是检查父节点是“选项”还是“节点” e.g
if ((element.getNodeName() == "parameter") & (element.getParentNode().getNodeName()== "node")) {
... }
if ((element.getNodeName() == "parameter") & (element.getParentNode().getNodeName()== "option")) {
... }