选择完整树和仅某些子元素

时间:2015-07-03 13:06:13

标签: xml xpath

我有这个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>

1 个答案:

答案 0 :(得分:2)

  

我需要所有具有&#34;属性&#34;具有&#34;值&#34; =&#34; OK&#34;的节点,但是我   想要整个树,只有匹配的节点。

     

我只能设置一个或另一个,而不是两个。

您无法同时获得这两项结果的原因是您试图通过XPath做太多。

XPath用于选择;您正在尝试构建

要构造或重构使用XPath选择的节点,必须使用托管语言(XSLT,Python,Java等)的功能。单独使用XPath是重新排列已选择的错误工具。