2013-09-28 39 views
6

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

例如,下面的样式表:

<xsl:template match="/"> 
    <xsl:element name="myelement"> 
    <xsl:attribute name="myattribute"> 
     attribute value 
    </xsl:attribute> 
    </xsl:element> 
</xsl:template> 

输出:

<myelement myattribute="&#10;  attribute value&#10; "/> 

,而我会把它想输出:

<myelement myattribute="attribute value"/> 

有什么办法来完成,其他而不是将<xsl:attribute>开始和结束标记折叠在一行中?

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

回答

6

你可以换用XSL文本:文本或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> 

<xsl:template match="/"> 
    <xsl:element name="myelement"> 
     <xsl:attribute name="myattribute"> 
      <xsl:value-of select="'attribute value'"/> 
     </xsl:attribute> 
    </xsl:element> 
</xsl:template> 

是对你有用? 否则请使用单行解释您的问题。

请把迈克尔·凯的意见的通知,就说明了问题,给点意见!

+0

问题是,如果属性值是一些复杂计算的结果,例如''元素,然后折叠一行中的所有代码以获得所需的结果将使样式表看起来非常可怕。 –

+2

您可以在xsl:attribute和xsl:choose之间使用换行符。 你只需要避免在文本节点中换行。 文本节点中的所有换行符都将在输出中找到。 xsl-elements之间的所有linebreaks都将被丢弃。 –

+1

好的,我明白了。在我的真实案例中,''由文本节点“两侧”将每个包装在''中可以有效地消除空白。问题解决了,谢谢! –