有很多关于在使用XSLT时忽略源XML数据中的空白的问题,但我真正想要的是在XSLT模板中包含空白(为了可读性),但不让它输出。编写带有空白的模板,然后将其转换为没有空白的新模板,这非常复杂,我希望有另一种选择。澄清一下,当我有XML片段
时<CAInfo prefix="073" serial="12345675" orig="AMS" dest="BRU" issuedate="2012-12-20" currency="EUR">
<RevisedWeight code="K" amt="140.5"/>
<OriginalWeight code="K" amt="2"/>
</CAInfo>
,我想输出
前/114 - 12345675 - amsbru/K140.5/K2/2012-12-20/欧元
我现在使用
<xsl:template match="CAInfo">
PRE/<xsl:value-of select="@prefix"/>-<xsl:value-of select="@serial"/><xsl:value-of select="@orig"/><xsl:value-of select="@dest"/>/<xsl:value-of select="RevisedWeight/@code"/><xsl:value-of select="RevisedWeight/@amt"/>/<xsl:value-of select="OriginalWeight/@code"/><xsl:value-of select="OriginalWeight/@amt"/>/<xsl:value-of select="@issuedate"/>/<xsl:value-of select="@currency"/>
</xsl:template>
我更愿意用的是
<xsl:template match="CAInfo">
PRE/<xsl:value-of select="@prefix"/>-<xsl:value-of select="@serial"/>
<xsl:value-of select="@orig"/><xsl:value-of select="@dest"/>
/<xsl:value-of select="RevisedWeight/@code"/><xsl:value-of select="RevisedWeight/@amt"/>
/<xsl:value-of select="OriginalWeight/@code"/><xsl:value-of select="OriginalWeight/@amt"/>
/<xsl:value-of select="@issuedate"/>
/<xsl:value-of select="@currency"/>
</xsl:template>
,但这会在输出上给我额外的换行符。我如何避免这些呢?
如何:
<xsl:template match="CAInfo">
<xsl:value-of select="concat('PRE/', @prefix, '-', @serial, '/', @orig, @dest, '/',
RevisedWeight/@code, RevisedWeight/@amt, '/', OriginalWeight/@code,
OriginalWeight/@amt, '/', @issuedate, '/', @currency)"/>
</xsl:template>