XSLT格式化数字,插入“ - ”从最右边的数字开始,每4位后(XSLT formatting nu

2019-10-18 08:35发布

我有一个数字,是27位长,我需要如下可读性格式化:

Input : 999967799857791961574987365

Expected output : 999-9677-9985-7791-9615-7498-7365

所以在口头上, 从右侧开始最,我需要插入一个-每4位后“”。

我一直在使用

<xsl:value-of select="format-number($ID, '###-####-####-####-####-####-####-####')" />

但它并没有在所有的工作。

任何帮助或指针将great..Cheers

Answer 1:

你不能只是通过在格式字符串为你做了就了事的原因是,在格式字符串中的字符都有着特殊的意义。 其中“ - ”被理解为减号,而不是作为一个分组分隔符。 要使其工作,你必须定义使用XSL格式:十进制格式,并使用可选的第三个参数号格式引用它。 下面是一个完整的样式表,你可以在任何XML文件调用来说明:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
  <xsl:output method="text"/>
  <xsl:decimal-format name="dashes" grouping-separator="-"/>
  <xsl:template match="/">
    <xsl:value-of select="format-number(999967799857791961574987365,
                                        '-####', 'dashes')"/>
    <xsl:text>&#x0A;</xsl:text>
  </xsl:template>
</xsl:stylesheet>


Answer 2:

这似乎是一个黑客给我,但你可以尝试:

<xsl:value-of select="translate(format-number($ID,',####'),',','-')"/>

这为我工作在XSLT 1.0和2.0。

注: $ID必须是整数。 您可能需要使用xs:integer($ID)这可能需要2.0处理器)。


答发表评论:

试试这个模版。

<xsl:template name="ReceiptId">
    <xsl:param name="RECEIPT_ID_UNFORMATTED"/>
    <xsl:variable name="RECEIPT_ID_FORMATTED" select="translate(format-number(xs:integer($RECEIPT_ID_UNFORMATTED),',####'),',','-')"/>
    <div class="line">
        <xsl:value-of select="concat($RECEIPT_ID_PREFIX,&quot; &quot;,$RECEIPT_ID_FORMATTED)"/>
    </div>
</xsl:template>

不要忘了申报xs命名空间中xsl:stylesheetxmlns:xs="http://www.w3.org/2001/XMLSchema" ),所以你可以使用xs:integer()



文章来源: XSLT formatting numbers, insert '-' after every 4 digits starting from the right most digit