Xpath用于选择元素的内部文本

时间:2018-06-20 13:45:58

标签: xpath

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

< 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;']")

但这定位于具有相同样式的元素。

有人知道我可以尝试的Xpath可以找到20.99吗?

2 个答案:

答案 0 :(得分:2)

在您的第一个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”的strong元素的span元素子元素。

  

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

要获取text()标记的strong节点,请将/text()附加到表达式:

答案 1 :(得分:2)

使用text()通常是错误的:谓词[contains(text(), 'xyz')]几乎总是更好地写为[contains(., 'xyz')]

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

相关问题