//div[contains(text(),'abc')]
和//div[contains(.,'abc')]
之间的区别是什么?
是“。”这里用作正则表达式,表示以abc
开头的任何文本?
答案 0 :(得分:3)
text()
测试选择上下文节点的所有文本节点子 。
点(.
)选择上下文节点本身。
作为contains()
函数的参数,.
和text()
都被解释为string value s,它是所有子文本节点的串联(请参阅"Element Nodes" ):
元素节点的字符串值是文档顺序中元素节点的所有文本节点后代的字符串值的串联。
在text()
的情况下,结果计算为所有直接文本节点值的串联。在.
的情况下,所有后代文本节点的文本值都是连接在一起的。
考虑一下:
<html>
<body>
<div>abc</div>
<div>444 <span>abc</span></div>
<div>def</div>
<div>123 abc</div>
</body>
</html>
//div/text()
选择以下内容:
//div/.
:
因此,//div[contains(text(),'abc')]
只选择两个div
s:
<div>abc</div>
<div>123 abc</div>
而//div[contains(.,'abc')]
选择包含div
文字节点的所有abc
:
<div>abc</div>
<div>444 <span>abc</span></div>
<div>123 abc</div>