2015-07-03 83 views
1

我有這個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> 

我需要具有「價值」的「屬性」節點=「OK」的所有元素,但我想 整個樹只有匹配的節點。

我只設法擁有一個或另一個,而不是兩個。

所以,我可以有具有價值屬性節點= 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> 

或者我可以有值 「OK」 的所有屬性:

//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> 

回答

2

我需要具有「價值」的「屬性」節點=「OK」的所有元素,但我 想整棵樹,只有節點,其比賽。

我只設法擁有一個或另一個,而不是兩個。

您無法實現兩個結果的原因是您嘗試通過XPath執行太多操作。

XPath用於選擇;你正在試圖做建設

要構建或重建用XPath選擇的節點,必須使用宿主語言(XSLT,Python,Java等)的功能。單獨XPath是重新安排已被選中的錯誤工具。