1

我有一个 27 位数长的号码,为了便于阅读,我需要格式化如下:

Input : 999967799857791961574987365

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

所以用文字来说,从最右边开始,我需要在每 4 个数字之后插入一个 '-'

我一直在使用

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

但它根本不起作用。

任何帮助或指示都会很棒..干杯

4

2 回答 2

2

您不能像以前那样只传递格式字符串并使其正常工作的原因是格式字符串中的字符都具有特殊意义。“-”被理解为减号,而不是分组分隔符。要使其工作,您必须使用 xsl:decimal-format 定义格式并使用可选的第三个参数来引用它 format-number。这是一个完整的样式表,您可以调用任何 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>
于 2013-07-11T20:11:03.877 回答
1

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

<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()

于 2013-07-10T20:01:14.163 回答