首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么规范化的空间()不剥夺所有的空间?

为什么规范化的空间()不剥夺所有的空间?
EN

Stack Overflow用户
提问于 2016-02-27 22:27:33
回答 2查看 3.4K关注 0票数 4

我编写了一个小小的XSLT,其中添加了normalize-space()函数以去掉不必要的空格:

http://xsltransform.net/bnnZWM

代码语言:javascript
复制
<xsl:template match="page/pageFunctionResult/*/text()">
   <xsl:value-of select="normalize-space(.)"/>
</xsl:template>

XSLT本身起作用,只是有些空格没有标准化:

代码语言:javascript
复制
<category> TEST </category>

我不明白为什么normalize-space()不能删除这些空格。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-27 22:40:06

规范化-空间()函数剥离https://www.w3.org/TR/REC-xml/#NT-S

3S ::= (#x20 \x9\ #xD \ #xA)+ )

链接示例中围绕TEXT的字符不是这些字符之一(正如@har07在注释中指出的那样)。@michael.hor257 k的string-to-codepoints()

代码语言:javascript
复制
<xsl:template match="page/pageFunctionResult[1]/category[1]">
  <xsl:value-of select="string-to-codepoints(substring(., 1, 1))"/>
</xsl:template>

我们可以看到它们是无间断空间字符(#xA0),也就是&nbsp;

要除去&nbsp;,你需要的不仅仅是normalize-space().

XSLT1.0

见@michael.hor257 k的答案。 (+1)

XSLT2.0

如果希望覆盖&nbsp;和其他类型的空格字符,请在normalize-space()之前使用replace()类别转义

代码语言:javascript
复制
<xsl:value-of select="normalize-space(replace(., '\p{Z}', ' '))"/>
票数 5
EN

Stack Overflow用户

发布于 2016-02-27 23:06:34

正如注释中所指出的,这些字符实际上是不间断的空格字符(#160)。若要将它们作为常规空间处理,请使用:

代码语言:javascript
复制
<xsl:value-of select="normalize-space(translate(., '&#160;', ' '))"/>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35676242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档