2011-08-01 95 views
2

我有以下xml文檔。我試圖選擇任何具有相同值2且值3不關閉的兄弟的任何孩子。XPath以下兄弟與多個條件

<root> 
    <child> 
    <value1>Type A</value1> 
    <value2>Class 1</value2> 
    <value3>Active</value3> 
    </child> 
    <child> 
    <value1>Type B</value1> 
    <value2>Class 1</value2> 
    <value3>Closed</value3> 
    </child> 
    <child> 
    <value1>Type C</value1> 
    <value2>Class 2</value2> 
    <value3>Active</value3> 
    </child> 
    <child> 
    <value1>Type D</value1> 
    <value2>Class 2</value2> 
    <value3>Active</value3> 
    </child> 
    <child> 
    <value1>Type E</value1> 
    <value2>Class 3</value2> 
    <value3>Active</value3> 
    </child> 
</root> 

我的嘗試是:

//子[!以下同胞::子/值2 =值2和值3 = '封閉']

但這是不是有將多個條件應用於後續兄弟功能的期望結果。

任何想法?

+0

它返回所有以下兄弟姐妹哪裏'value3!=關閉'? – biziclop

+0

不,它返回的類型A和類型C,其中有另一個孩子與匹配的值2,但類型A的第二個孩子是封閉的,因此不應該返回 –

回答

6
//child[value2 = following-sibling::child[not(value3 = 'Closed')]/value2] 

適用於任何兄弟姐妹,工會following-siblingpreceding-sibling軸。

//child[value2 = (following-sibling::child | preceding-sibling::child)[not(value3 = 'Closed')]/value2] 
+1

謝謝,正是我所需要的......只是添加了「和值3 !='關閉'「,以確保第一個孩子也沒有取消。 –