2010-04-29 156 views
3

有一項任務用於輸出使用XSLT從數據庫中獲取的某些數據。應用程序當前的語言環境是ru_RU,因此小數點分隔符是逗號。它看起來像使用XSLT將字符串轉換爲數字

<data> 
    <row> 
    <date value="28.04.2010"/> 
    <clicks value="281"/> 
    <depth value="1,7"/> 
    <row> 
    <row> 
    <date value="29.04.2010"/> 
    <clicks value="15"/> 
    <depth value="3"/> 
    <row> 
<data> 

它需要格式化「深度」十進制數值:1,70和3,00。當我嘗試變換值伊辛:

<xsl:value-of select="format-number(number(depth/@value)), '##.##'"/> 

我得到NaN的因爲鑄造屬性值數時,XSLT處理器不考慮逗號作爲小數點分隔符。

它有助於在某種程度上,當我手動「翻譯」,從「十進制逗號」格式源字符串爲「小數點」一個

<xsl:value-of select="format-number(number(translate(depth/@value, ',', '.'))), '##.##'"/> 

,但它看起來相當醜陋。

是否有更正確和集中的方式告訴處理器逗號是小數點分隔符?

回答

2

沒有更正確或集中的方式。 我這樣做的方式是用一個特殊的xslt預處理XML文件,這個特殊的xslt可以像你一樣轉換數字。

1

您是否嘗試過使用format-number的區域設置參數? (format-number有第三個可選參數)

+0

不介意,它不起作用。 – baol 2010-04-29 15:35:08

+0

另外,如果您的語言環境設置正確,並且解析器支持本地化,您可能需要擺脫「數字」調用,但AFAI瞭解它不是本地化的。 – baol 2010-04-29 16:20:51

+0

處理器是PHP 5.3中的XSLTProcessor,我還沒有發現任何關於它的本地化的提及。 應用程序語言環境設置正確: <?php setlocale(LC_ALL,'ru_RU.koi8r'); echo 0.26; >> 0,26 – 2010-04-30 07:35:44