XPath - 选择一个元素或另一个元素

15

我正在使用XPath从HTML文档中获取仅一个元素。该元素必须具有特定的id,如果该id不存在,则获取一个保证存在的元素(例如body元素)。

要通过id获取元素,我使用:

css=#may-not-exist

我使用以下代码来获取回退元素(例如,主体):

css=body

我如何将上述这两个表达式合并为一个表达式(获取#may-not-exist或者获取body)?

1个回答

33

使用 body 作为默认值是可行的。它将首先从表达式中出现,因为它在任何其他内容之前开始(除非您正在搜索 head 中的内容)。

(//*[@id="xxx"] | //body)[last()]

解释:

( ... | ... ) 部分返回其子部分的并集。这些子部分是 *[@id="xxx"],即任何具有 id 属性值为 xxx 的元素 ,以及 //body,即 body 元素。从这个并集中,[last()] 选择最后一个节点。返回的节点按照在原文档中的顺序排序,因此 body 元素排在第一位(至少在 body 内的任何内容之前)。如果存在具有该 id 的元素,则它将在 body 后出现并被返回。如果不存在该元素,则 body 将作为并集返回的唯一(第一个和最后一个)节点返回。


虽然Selenium IDE似乎对括号感到困惑,但您提供的表达式似乎是有效的,因此选择接受。谢谢。 - Paul Pepper
@Anthony:请参考W3C的《XML Path Language version 1.0》中Node sets下的union operator - choroba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接