我试图找到具有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回答(我没试过)。
如果您要查找B
和SPAN
之间的第一个节点,请使用har07 answer。
答案 0 :(得分:2)
根据Michael的评论,请注意*[name()='B' or name()='SPAN']
将返回第一个preceding-sibling
B
或SPAN
。
如果我正确理解了您的问题,您希望“回退”&#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]