选择元素内文本的XPath

3

我需要在网页上选择以下元素

< td colspan = "1" >
< span class="text-left">
<strong>QTY Total
</strong></span>
<span style = "float: right;" >
< strong > 20.99 </ strong >
</ span > 
</ td >

我需要提取的元素是20.99文本,它是一个子元素。
我尝试了以下方法来定位该元素,但没有返回任何内容。
$x("//*[@style='float: right;' and contains(text(), '20.99')]")

我尝试使用以下方法定位元素:

$x("//*[@style='float: right;']")

但是这会定位到具有相同样式的元素。

有人知道我可以尝试定位20.99的Xpath吗?

2个回答

3
在您的第一个XPath中,“20.99”文本是strong子元素。因此,您必须在contains(...)子句中使用该元素。
//*[@style='float: right;' and contains(strong/text(), '20.99')]/strong

也许更好的XPath搜索方法是明确地搜索span元素。

//span[@style='float: right;' and contains(strong/text(), '20.99')]/strong

这也是可以使用的。
两者都选择了具有文本“20.99”的span元素的strong元素子级。

我需要提取的元素是20.99文本

为了获取strong标签的text()节点,请在表达式末尾添加/text()


3

通常来说,使用text()是错误的:谓语[contains(text(), 'xyz')]几乎总是最好改写成[contains(., 'xyz')]

这是因为 . (在这里等同于 string(.) )选择上下文元素的内容作为字符串,而不考虑任何嵌套元素、注释等,而 text() 只查看立即文本节点子节点。


它只会找到完全匹配的元素(即xyz),还是也会找到包含更多内容的元素(例如abcxyzxyzabc)? - Ωmega

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