我有这个XML文件:
<xml>
<element>
<name>A</name>
<property no="1" value="OK" />
<property no="2" value="NO" />
<property no="3" value="OK" />
</element>
<element>
<name>B</name>
<property no="1" value="NO" />
<property no="2" value="NO" />
<property no="3" value="OK" />
<property no="4" value="OK" />
</element>
<element>
<name>C</name>
<property no="1" value="NO" />
<property no="2" value="NO" />
</element>
</xml>
我需要所有具有&#34;属性&#34;节点&#34;值&#34; =&#34; OK&#34;,但我想要 整个树和只匹配的节点。
我只能设置一个或另一个,而不是两个。
所以,我可以让整个元素树都具有值= OK的属性节点:
//element[property/@value="OK"]
给了我:
<element>
<name>A</name>
<property no="1" value="OK"/>
<property no="2" value="NO"/>
<property no="3" value="OK"/>
</element>
<element>
<name>B</name>
<property no="1" value="NO"/>
<property no="2" value="NO"/>
<property no="3" value="OK"/>
<property no="4" value="OK"/>
</element>
或者我可以拥有所有具有价值的属性&#34; OK&#34;:
//element/property[@value="OK"]
给了我:
<property no="1" value="OK"/>
<property no="3" value="OK"/>
<property no="3" value="OK"/>
<property no="4" value="OK"/>
这是我需要的,但是:
<element>
<name>A</name>
<property no="1" value="OK" />
<property no="3" value="OK" />
</element>
<element>
<name>B</name>
<property no="3" value="OK" />
<property no="4" value="OK" />
</element>
答案 0 :(得分:2)
我需要所有具有&#34;属性&#34;具有&#34;值&#34; =&#34; OK&#34;的节点,但是我 想要整个树,只有匹配的节点。
我只能设置一个或另一个,而不是两个。
您无法同时获得这两项结果的原因是您试图通过XPath做太多。
XPath用于选择;您正在尝试构建。
要构造或重构使用XPath选择的节点,必须使用托管语言(XSLT,Python,Java等)的功能。单独使用XPath是重新排列已选择的错误工具。