2013-01-07 66 views
1

使用XSLT時,有很多問題提及忽略源XML數據中的空白,但我真正想要的是將空白包含在XSLT模板中(爲了便於閱讀),但沒有輸出。用空格編寫模板,然後將其轉換爲一個沒有空白的新模板使事情複雜化太多了,我想要一個替代方案。作爲一個澄清,當我有XML片段忽略xslt模板內容中的空白

<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> 

,我想輸出

PRE/114-12345675AMSBRU/K140.5/K2 /二〇一二年十二月二十零日/歐元

我現在用

<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> 

但這會給我額外的輸出結果。我如何避免這些?

+1

這是回答和解釋在這裏:[?我如何聲明一個XSL變量時刪除空格](http://stackoverflow.com/questions/3637369/how-can- i-remove-whitespace-when-declaring-an-xsl-variable) – Tomalak

+0

哦!冗長! – Martijn

+0

這是XSLT - 不要假裝你感到驚訝。 ;) – Tomalak

回答

2

如何:

<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>