我有许多xsl:value-of调用的 XSLT 代码。我需要修剪所有值中的空格。
每次调用都非常繁琐地编写 normalize-space() 。
我使用模板:
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
但它没有效果。
谢谢!
对不起我的英语不好。
更新:我认为@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>
将 normalize-space() 调用放在文本节点的模板规则中不起作用,因为 xsl:value-of 不应用模板规则。如果您更改<xsl:value-of select="."/>
为<xsl:apply-templates/>
(无处不在),那么它将起作用。