XSL错误:格式编号图片:在子图片的活动字符之间不能出现被动字符

问题描述 投票:0回答:2

需要读取数字并将其格式化。

输入:

<InitialReading>500</InitialReading>
<InitialReading>620,25</InitialReading>
<InitialReading>1 200,5</InitialReading>
<InitialReading>1 100</InitialReading>

XSL:

<xsl:call-template name="formatNumber3">
    <xsl:with-param name="number"
                        select="format-number(number(InitialReading/translate(., ',', '.')), '# ###0.000')"/>
</xsl:call-template>
<xsl:template name="formatNumber3">
    <xsl:param name="number"/>
    <xsl:call-template name="formatNumber">
        <xsl:with-param name="number" select="$number"/>
        <xsl:with-param name="format" select="'# ##0,000'"/>
    </xsl:call-template>
</xsl:template>
<xsl:decimal-format name="SUM_FORMAT" grouping-separator=" " decimal-separator=","/>
<xsl:template name="formatNumber">
    <xsl:param name="number"/>
    <xsl:param name="format"/>
    <xsl:if test="normalize-space($number)">
        <xsl:value-of select="format-number(number(normalize-space($number)), $format, 'SUM_FORMAT')"/>
    </xsl:if>
</xsl:template>

预期输出:

<p>500,000</p>
<p>620,250</p>
<p>1 200,500</p>
<p>1 100,000</p>

更新:

select="format-number(number(InitialReading/translate(., ',', '.')), '##0.000')"打印NaN作为最后两个值。所有其他值均正确呈现。

该解决方案必须与saxon和xalan实现兼容。

xml xslt java-8 saxon xalan
2个回答
0
投票

以下内容适用于XSLT 1和3处理器:

  <xsl:template match="InitialReading">
      <xsl:variable name="number"
        select="number(translate(., ', ', '.'))"/>
      <p>Parsed value : <xsl:value-of select="$number"/></p>
      <p>Formatted value: <xsl:value-of select="format-number($number, '# ##0,000', 'SUM_FORMAT')"/></p>
  </xsl:template>

[C0处的输出:

https://xsltfiddle.liberty-development.net/6rexjhV/2

0
投票

这里有两个问题:输入和输出。

如果输入的字符串格式不正确,则

<p>Parsed value : 500</p> <p>Formatted value: 500,000</p> <p>Parsed value : 620.25</p> <p>Formatted value: 620,250</p> <p>Parsed value : 1200.5</p> <p>Formatted value: 1 200,500</p> <p>Parsed value : 1100</p> <p>Formatted value: 1 100,000</p> Parsed value : 500 Formatted value: 500,000 Parsed value : 620.25 Formatted value: 620,250 Parsed value : 1200.5 Formatted value: 1 200,500 Parsed value : 1100 Formatted value: 1 100,000 应用于字符串将为您提供number()。这意味着您不仅需要将NaN转换为",",而且还需要摆脱嵌入式空白。您可以使用"."一次性完成此操作。

对于输出,我认为您对translate($in, ", ", ".")的呼叫应该可以正常工作。我不知道您为什么会收到有关格式图片的错误。但是您已经多次更新了问题,所以我不知道您是否仍然遇到该错误。

© www.soinside.com 2019 - 2024. All rights reserved.