我有许多 xsl:value-of 调用的XSLT代码。我需要修剪所有值中的空格。
每次调用都非常繁琐地写normalize-space()
我用模板:
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
但它没有效果。
谢谢!
抱歉我的英文。
答案 0 :(得分:2)
更新:我认为@Michael Kay的答案最有可能是你想要的。
strip-space elements="*"
仅删除带有空白文本的节点<xsl:if test=
)项目的抢劫并且希望避免在测试条件中normalize-space
,那么使用下面的“中间节点集”解决方案可能只有一个原因以下原始答案
<xsl:strip-space elements="*" />
应该有所帮助。 (就在您的xlst的顶层。)
更新(下次尝试;-)) 您可以使用exsl:node-set。
构建一个没有空格的中间节点集<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:variable name="intermediate">
<xsl:apply-templates mode="ws_remove"/>
</xsl:variable>
<xsl:apply-templates select="exsl:node-set($intermediate)/*"/>
</xsl:template>
<xsl:template match="@*|node()" mode="ws_remove">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="ws_remove"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" mode="ws_remove" >
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
<xsl:template match ="root">
<test>
<xsl:value-of select="test"/>
</test>
</xsl:template>
</xsl:stylesheet>
使用此输入
<root>
<test> adfd das </test>
</root>
生成此输出:
<test>adfd das</test>
答案 1 :(得分:2)
将normalize-space()调用放在文本节点的模板规则中不起作用,因为xsl:value-of不应用模板规则。如果您将<xsl:value-of select="."/>
更改为<xsl:apply-templates/>
(无处不在),则可以正常使用。