为什么 normalize-space() 不去除所有 spaces?
Why does normalize-space() not strip all spaces?
我写了一点 XSLT,其中添加了 normalize-space()
函数来去除不必要的空格:
http://xsltransform.net/bnnZWM
<xsl:template match="page/pageFunctionResult/*/text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
XSLT 本身可以工作,除了一些空格没有规范化:
<category> TEST </category>
我不明白为什么 normalize-space()
不能删除这些空格。
normalize-space() function strips whitespace:
[3] S ::= (#x20 | #x9 | #xD | #xA)+
链接示例中 TEXT
周围的字符 不是 这些字符之一(正如 @har07 在评论中指出的那样)。根据@michael.hor257k 的 clever use of string-to-codepoints()
、
<xsl:template match="page/pageFunctionResult[1]/category[1]">
<xsl:value-of select="string-to-codepoints(substring(., 1, 1))"/>
</xsl:template>
我们可以看到它们是 NO-BREAK SPACE 个字符 (#xA0),又名
。
要删除
,您需要的不仅仅是 normalize-space()
...
XSLT 1.0
(+1)
XSLT 2.0
如果您想覆盖
以及其他类型的空白字符,请使用 replace()
并在 normalize-space()
之前添加 category escape:
<xsl:value-of select="normalize-space(replace(., '\p{Z}', ' '))"/>
如评论中所述,这些字符实际上是不间断的 SPACE 个字符 (#160)。要将它们作为常规空格处理,请使用:
<xsl:value-of select="normalize-space(translate(., ' ', ' '))"/>
我写了一点 XSLT,其中添加了 normalize-space()
函数来去除不必要的空格:
http://xsltransform.net/bnnZWM
<xsl:template match="page/pageFunctionResult/*/text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
XSLT 本身可以工作,除了一些空格没有规范化:
<category> TEST </category>
我不明白为什么 normalize-space()
不能删除这些空格。
normalize-space() function strips whitespace:
[3] S ::= (#x20 | #x9 | #xD | #xA)+
链接示例中 TEXT
周围的字符 不是 这些字符之一(正如 @har07 在评论中指出的那样)。根据@michael.hor257k 的 clever use of string-to-codepoints()
、
<xsl:template match="page/pageFunctionResult[1]/category[1]">
<xsl:value-of select="string-to-codepoints(substring(., 1, 1))"/>
</xsl:template>
我们可以看到它们是 NO-BREAK SPACE 个字符 (#xA0),又名
。
要删除
,您需要的不仅仅是 normalize-space()
...
XSLT 1.0
XSLT 2.0
如果您想覆盖
以及其他类型的空白字符,请使用 replace()
并在 normalize-space()
之前添加 category escape:
<xsl:value-of select="normalize-space(replace(., '\p{Z}', ' '))"/>
如评论中所述,这些字符实际上是不间断的 SPACE 个字符 (#160)。要将它们作为常规空格处理,请使用:
<xsl:value-of select="normalize-space(translate(., ' ', ' '))"/>