Xpath兄弟条件(或)

时间:2014-12-13 02:00:20

标签: xpath

我试图找到具有OR条件的节点的第一个preceding-sibling 例如,我有一个节点A,我尝试获取第一个前一个兄弟B但是如果没有B则获得第一个前一个兄弟SPAN。< / p>

我不知道如何做OR条件:
这就是我的尝试:

A//preceding-sibling::B|SPAN[1]
A//preceding-sibling::B[1]|SPAN[1]
A//preceding-sibling::B[1]|preceding-sibling::SPAN[1]
A//(preceding-sibling::B[1]|preceding-sibling::SPAN[1]) // Xpath invalid
A//preceding-sibling::(B|SPAN)[1] // Xpath invalid
.... and many more

简而言之,我正在寻找:节点 - &gt; preceding-sibling::NodeType1[1]preceding-sibling::NodeType2[1]

有没有办法用Xpath实现这一点,或者我必须尝试一个,如果没有结果,请尝试另一个?

编辑:

这个问题的好答案是我认为StuartLC回答(我没试过)。
如果您要查找BSPAN之间的第一个节点,请使用har07 answer。

2 个答案:

答案 0 :(得分:2)

根据Michael的评论,请注意*[name()='B' or name()='SPAN']将返回第一个preceding-sibling BSPAN

如果我正确理解了您的问题,您希望“回退”&#39;至SPAN只有IFF,B根本没有preceding-sibling A。 AFAIK您需要使用union重复查询:

(A/preceding-sibling::B[1] | A/preceding-sibling::SPAN[1])[1]

答案 1 :(得分:1)

您可以尝试这种方式:

A//preceding-sibling::*[name()='B' or name()='SPAN'][1]