我正在编写一个 XPath 表达式,并且修复了一个奇怪的错误,但是以下两个 XPath 表达式有什么区别?
"//td[starts-with(normalize-space()),'Posted Date:')]"
and
"//td[starts-with(normalize-space(text()),'Posted Date:')]"
主要是,第一个 XPath 表达式会捕获什么?因为我得到了很多奇怪的结果。那么什么是text()
进行匹配?另外,如果我说的话有什么不同吗normalize-space()
& normalize-space(.)
?
好吧,真正的问题是:两者之间有什么区别.
and text()
?
.
是当前节点。如果您在需要字符串的地方使用它(即作为normalize-space()
),引擎自动将节点转换为节点的字符串值,对于一个元素来说,该字符串值是该元素内的所有文本节点串联而成。 (因为我猜这个问题实际上是关于元素的。)
text()
另一方面,仅选择当前节点的直接子节点的文本节点。
例如,给定 XML:
<a>Foo
<b>Bar</b>
lish
</a>
并假设<a>
是你当前的节点,normalize-space(.)
将返回Foo Bar lish
, but normalize-space(text())
会失败,因为text()
返回两个文本节点的节点集(Foo
and lish
), 哪个normalize-space()
不接受。
长话短说,如果您想标准化元素中的所有文本,请使用.
。如果要选择特定的文本节点,请使用text()
,但永远记住,尽管它的名字,text()
返回一个节点集,仅当它具有单个元素时才会自动转换为字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)