2010-03-12 30 views
2

我想基於XML的某些信息修改樣式表的小數格式。更exaclty,我有這樣的xslt中的十進制格式的條件選擇

<?xml version="1.0" encoding="ISO-8859-1"?> 
<REPORT> 
    <LANGUAGE>2</LANGUAGE> 
    <MYVALUE>123456.78</MYVALUE> 
</REPORT> 

一個XML我試圖定義十進制格式歐洲如果語言爲2,默認otherwse。所以我創建了以下模板

<xsl:template match="REPORT"> 
    <xsl:if test="$language=2"> 
      <xsl:decimal-format decimal-separator=',' grouping-separator='.' /> 
    </xsl:if> 
    <xsl:value-of select ="format-number(MYVALUE,'###.###,00')"/> 
</xsl:template> 

因此它顯示歐洲格式或標準格式的數字。但我得到以下錯誤

xsl:十進制格式不允許在樣式表中的這個位置!

如果我嘗試將十進制格式放在模板外部,那麼我會在sthylsheet的這個位置得到xsl:if不允許的消息。我如何更改基於XML的小數格式?

感謝 何塞

回答

0

decimal-format必須是一個頂級元素,但是你可以將其命名,然後參考名稱在條件結構,或許像下面會爲你工作。

<xsl:decimal-format name="format1" decimal-separator=',' grouping-separator='.' /> 
<xsl:template match="REPORT"> 
    <xsl:choose> 
    <xsl:when test="$language=2"> 
     <xsl:value-of select="format-number(MYVALUE,'###.###,00','format1')"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="MYVALUE"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
1

元素只能直接定義元素的下面。在定義之後,您可以使用fromat-number函數中定義的格式。

<xsl:stylesheet ... namespaces, etc. ...> 
    <xsl:decimal-format name="de" decimal-separator=',' grouping-separator='.'/> 
    <xsl:decimal-format name="us" decimal-separator='.' grouping-separator=','/> 

    <xsl:param name="numFormat"> 
     <xsl:choose> 
      <xsl:when test="/REPORT/@language = 2"> 
       <xsl:text>us</xsl:text> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:text>de</xsl:text> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:param> 

    <xsl:template match="REPORT"> 
     <xsl:choose> 
      <xsl:value-of select="format-numer(MYVALUE, '###.###,00', $numFormat)"/> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 
+0

是的,這有效,但由於所有的文檔應該有相同的格式,我想在文檔的開頭定義它,而不是使用選擇/每當我必須顯示一個數。 – 2010-03-12 23:20:29

+0

@Jose:請參閱編輯。 – AxelEckenberger 2010-03-12 23:34:05