规范化空间(.)和规范化空间(文本())有什么区别?

2024-03-16

我正在编写一个 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(使用前将#替换为@)

规范化空间(.)和规范化空间(文本())有什么区别? 的相关文章

随机推荐