2011-08-01 19 views
2

私は以下のXML文書を持っています。私は同じ値2の兄弟を持ち、value3が閉じていない子を選択しようとしています。複数の条件を持つ兄弟姉妹の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 = 'クローズ']

が、これは持っていません後続の兄弟関数に複数の条件を適用した場合の望ましい結果です。

アイデア?任意の兄弟、組合following-siblingpreceding-sibling軸に適用する

+0

'value3!= closed'の次のすべての兄弟を返しますか? – biziclop

+0

いいえ、一致する値2の別の子を持つタイプAとタイプCは返されませんが、タイプAの2番目の子は閉じているので返されません。 –

答えて

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

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

ありがとう、ちょうど私が必要としたもの...ちょうど "とvalue3 != 'Closed' "を使用して、最初の子がキャンセルされなかったことを確認します。 –

関連する問題