2

我有许多xsl:value-of调用的 XSLT 代码。我需要修剪所有值中的空格。
每次调用都非常繁琐地编写 normalize-space() 。
我使用模板:

<xsl:template match="text()">
    <xsl:value-of select="normalize-space(.)"/>
</xsl:template>

但它没有效果。
谢谢!
对不起我的英语不好。

4

2 回答 2

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>
于 2013-04-25T16:13:36.010 回答
2

将 normalize-space() 调用放在文本节点的模板规则中不起作用,因为 xsl:value-of 不应用模板规则。如果您更改<xsl:value-of select="."/><xsl:apply-templates/>(无处不在),那么它将起作用。

于 2013-04-25T18:03:46.690 回答