我需要在网页上选择以下元素
< 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吗?
答案 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()
只看直接文本节点的子级。