Xsl结合了substring-before和format-number

时间:2018-07-04 20:51:17

标签: xml xslt

我正在尝试合并一个substring-before(获取不带'-'的数字)和一个format-number,但发送错误。

我尝试这个XSL:

<fo:block text-align="right" margin-right="3px" margin-top="5px">
    <xsl:value-of select="format-number(substring-before(/DTE/pdf/dscDistri/text(), '-'), '#.###,00', 'CL')"/>
</fo:block>

XML:

<dscDistri>4956,00-</dscDistri>
<dscFinan>1239,00-</dscFinan>
<dscEspec>194,00-</dscEspec>

PDF

2 个答案:

答案 0 :(得分:0)

可能是您使用了错误的格式。 尝试  #,###。00代替#。###,00

答案 1 :(得分:0)

这是欧盟对美国表示法的典型问题。一种解决方案是两次使用translate函数。首先,使用它将字符串转换为美国格式。然后应用format-string(..)。最后将字符串转换回EU表示法。

这可能看起来像这样:

<fo:block text-align="right" margin-right="3px" margin-top="5px">
    <xsl:value-of select="translate(format-number(translate(substring-before(DTE/pdf/dscDistri/text(), '-'),',.','.,'), '#,###.00'),'.,',',.')"/>
</fo:block>

输出:

<fo:block...>4.956,00</fo:block>

这很丑陋,但是XSLT规范是以美国为中心的。因此,这对欧盟人民来说是一个糟糕的局面。