我正在尝试返回网页的 XPath 查询的第一个元素,但不确定为什么这在 Google Chrome 中不起作用。我尝试了各种变体,但这没有成功。
基本示例在我的例子中返回:
INPUT: //button[@data-qtip='Next Page']/@id
OUTPUT: [id="button-1135-btnEl",id="button-1101-btnEl"]
所以我的猜测是,选择第一项可以按以下方式完成,但对我来说没有用。
INPUT: //button[@data-qtip='Next Page' and position() = 1]/@id
OUTPUT: [id="button-1135-btnEl",id="button-1101-btnEl"]
INPUT: //button[@data-qtip='Next Page']/@id[1]
OUTPUT: [id="button-1135-btnEl",id="button-1101-btnEl"]
最佳答案
//button[@data-qtip='Next Page']/@id[1]
这是 XPath 中最常见的 FAQ 之一。
上述表达式通常不会按预期选择(仅)一个节点。
原因是什么?
在 W3C XPath Specification //
缩写的定义方式使得此伪运算符的优先级低于 XPath []
运算符。
因此,任何表达式如:
//SomeNode[1]
选择所有 SomeNode
节点,每个节点都是其父节点的第一个 SomeNode
子节点。一般情况下,这样的节点可能不止一个。
当我们想要选择文档中的第一个SomeNode
节点时,我们必须使用方括号覆盖默认的运算符优先级:
(//SomeNode)[1]
在这种特殊情况下使用:
(//button[@data-qtip='Next Page']/@id)[1]
关于html - 如何从 XPath 中的按钮元素中选择第一个 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325844/