如何在<xsl:attribute>标记内删除空格?

The*_*ras 6 xml xslt

在XSLT样式表中,如何删除<xsl:attribute>标记内的前导和尾随空格?

例如,以下样式表:

<xsl:template match="/">
  <xsl:element name="myelement">
    <xsl:attribute name="myattribute">
      attribute value
    </xsl:attribute>
  </xsl:element>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

输出:

<myelement myattribute="&#10;      attribute value&#10;    "/>
Run Code Online (Sandbox Code Playgroud)

虽然我希望它输出:

<myelement myattribute="attribute value"/>
Run Code Online (Sandbox Code Playgroud)

除了将<xsl:attribute>开始和结束标记折叠在一行之外,还有什么办法可以实现吗?

因为如果属性值不是简单的文本行而是一些复杂计算的结果(例如使用或标记),那么将一行中的所有代码折叠以避免前导和尾随空格将导致可怕的丑陋样式表.

Mat*_*s M 7

您可以通过xsl:text或xsl:value-of包装文本:

<xsl:template match="/">
    <xsl:element name="myelement">
        <xsl:attribute name="myattribute">
            <xsl:text>attribute value</xsl:text>
        </xsl:attribute>
    </xsl:element>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

要么

<xsl:template match="/">
    <xsl:element name="myelement">
        <xsl:attribute name="myattribute">
            <xsl:value-of select="'attribute value'"/>
        </xsl:attribute>
    </xsl:element>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

这对你有用吗?否则请使用单行解释您的问题.

请注意Michael Kay的评论,它解释了问题所在!

  • 您可以在xsl:attribute和xsl:choose之间使用换行符.您只需要避免文本节点中的换行符.文本节点中的所有换行符都将在输出中找到.xsl-elements之间的所有换行符都将被丢弃. (2认同)