XSL转换格式编号,用于删除小数并添加前导零

时间:2015-08-05 19:16:59

标签: xml xslt transformation

我有一个案例,我需要将数字格式1234.56格式化为123456我可以做到这一点没问题,我还需要在数字的前面加上填充零,以便占用12个空格。我也可以这样做。问题是如何组合这两个进程来格式化数字并添加填充?

我的代码:

<xsl:value-of select="format-number(substring(concat(Payment, $Pad50), 1, 12), "0")"/> 

我收到错误:

  

元素类型“xsl:value-of”必须后跟属性规范,“&gt;”或“/&gt;”。

1 个答案:

答案 0 :(得分:3)

这应该有效

<xsl:value-of select="format-number(Payment * 100, '000000000000')"/> 

您的想法是,您将Payment节点的两位小数点移动(乘以100),然后告诉format-number将数字填零,以便#&1#} 39;长12个字符(前导0)。唯一可能的问题是,如果Payment有时非常大并且乘以100会导致溢出 - 但是您的12位数上限表明不应该成为问题。

您的原始代码存在一些问题:

  1. 您错误地将最后一个参数传递给format-number - 使用'代替",否则处理器会认为您正在关闭select属性并且我不知道如何处理0和另一个"
  2. concatsubstring将返回字符串 - format-number期望一个数字作为第一个参数。如果您将字符串转换为number,则会丢失所有填充的零。
  3. 您可以使用一组不同的函数 - 假设$Pad50是一个由十二个零组成的字符串:

    <xsl:value-of select="substring(translate(concat($Pad50, Payment), '.', ''), string-length(Payment), 12)" />
    
  4. 但这会变得混乱。