2014-09-04 67 views
3

我們有一個XML數字,它可以在一個大的XML文件中達到3位數,該文件必須轉換爲固定長度的文本才能加載到另一個系統中。XSLT 1.0中帶有前導零的填充數

我需要墊此與輸出前導零到15的長度(其爲固定長度的文本)

實例:

- 1 becomes 000000000000001 
- 11 becomes 000000000000011 
- 250 becomes 000000000000250 

我嘗試這樣做:

<xsl:value-of select="substring(concat('000000000000000', msg:BankAccount/msg:Counter), 12, 15)"/> 

在開始時得到15個零並取出子字符串,但是我必須在子字符串中出錯,因爲在結果中我得到了

0000000000000000000000009LLOYDS BANK PLC 
00000000000000000000000010LLOYDS BANK PLC 

我也試過format-number但我把它返回NaN

<xsl:value-of select="format-number(msg:BankAccount/msg:Counter, '000000000000000')"/> 

回報「男」

所以我做了什麼錯的,什麼是做到這一點的最好方法是什麼?

+0

是否'味精:Counter'有 「勞埃德銀行PLC」 在它結束了嗎? 'format-number()'只適用於數字。 – JLRishe 2014-09-04 09:49:41

+0

不,它只有一個數字,我保存在'LLOYDS BANK PLC'中以顯示錯誤導致的效果。 – 2014-09-04 09:51:42

+3

如果msg:Counter是一個數字,那麼沒有理由format-number應該返回NaN。你沒有告訴我們有什麼問題。 – 2014-09-04 13:22:31

回答

7

我需要與前導零墊這對15的長度在輸出(

這將是

substring(
    concat('000000000000000', msg:BankAccount/msg:Counter), 
    string-length(msg:BankAccount/msg:Counter) + 1, 
    15 
) 
+0

感謝您的幫助,非常感謝,我沒有考慮檢查這樣的長度。 – 2014-09-04 10:08:02

7

另一種方法是

substring(string(1000000000000000 + $x), 2) 
+2

但是,如果$ x是一個數字...... – 2014-09-04 13:30:28

+3

是的,我假設$ x是一個數字,或者將被轉換爲數字的值(具體取決於它是XPath 1.0還是2.0)。 – 2014-09-04 14:06:45

+0

非常優雅的解決方案 – DAB 2016-03-17 14:53:21

6

它也可以使用字符串格式完成

<xsl:value-of select="format-number(msg:BankAccount/msg:Counter, '000000000000000')" /> 

一般:

<xsl:value-of select="format-number(number_you_would_like_to_padd, 'string_how_much_zeros_you_would like')" />