2011-08-01 64 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 !='关闭'“,以确保第一个孩子也没有取消。 –