XPATH之normalize-space(.)和normalize-space(text())区别

Posted songzhenhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XPATH之normalize-space(.)和normalize-space(text())区别相关的知识,希望对你有一定的参考价值。

normalize,字面意思就是正规化,加上space大概意思就是空格的处理了。

官方解释是这样的:

通过去掉前导和尾随空白并使用单个空格替换一系列空白字符,使空白标准化。如果省略了该参数,上下文节点的字符串值将标准化并返回。

 

.是当前节点。如果在需要字符串的地方使用它(例如作为参数normalize-space()),引擎会自动将节点转换为节点的字符串值,对于元素来说,该元素是元素内连接的所有文本节点。

text() 另一方面仅选择作为当前节点的直接子节点的文本节点。

例如,给定XML:

<a>Foo
    <b>Bar</b>
  lish
</a>

假设<a>是你当前的节点,normalize-space(.)将返回Foo Bar lish,但normalize-space(text())会失败,因为text()返回两个文本节点(Foolish)的节点集,它normalize-space()不接受。

长话短说,如果你想标准化一个元素中的所有文本,请使用.。如果要选择特定的文本节点,请使用text(),但请始终记住尽管名称不同,但会text()返回一个节点集,如果节点集只有一个元素,它将自动转换为字符串。

以上是关于XPATH之normalize-space(.)和normalize-space(text())区别的主要内容,如果未能解决你的问题,请参考以下文章

xpath抓取的值有 时,去掉的方法

scrapy用xpath解析的内容怎么去除空格

XPath简明使用

xsl:如果有多次检查?

爬虫之Xpath详解

从0开始学爬虫3之xpath的介绍和使用