XSL样式表使用变量进行计算

时间:2016-11-03 09:59:10

标签: xslt xsl-fo

XML文件:

<formattedEgGesamt>270.​94</formattedEgGesamt>
<formattedEgGesperrt>50.00</formattedEgGesperrt>
<formattedHgGesamt>78.18</formattedHgGesamt>
<formattedHgGesperrt>4.00</formattedHgGesperrt>

在我的XSL文件中,我声明了4个变量:

<xsl:variable name="HGGesamt">
        <xsl:value-of select="format-number(/Basis/PersonenkontoDTO/formattedHgGesamt,'#.00')"/>
    </xsl:variable> 
    <xsl:variable name="HGGesperrt">
        <xsl:value-of select="format-number(/Basis/PersonenkontoDTO/formattedHgGesperrt,'#.00')"/>
    </xsl:variable>
    <xsl:variable name="EGGesamt">
        <xsl:value-of select="format-number(/Basis/PersonenkontoDTO/formattedEgGesamt,'#.00')"/>
    </xsl:variable> 
    <xsl:variable name="EGGesperrt">
        <xsl:value-of select="format-number(/Basis/PersonenkontoDTO/formattedEgGesperrt,'#.00')"/>
    </xsl:variable>

这些变量用于计算formattedHgGesamt和formattedHgGesperrt以及formattedEgGesamt和formattedEgGesperrt之间的差异。

应打印结果。

以下是用于打印2个结果的代码:

<fo:table-cell padding="3pt" display-align="center" border-style="solid" border-width="1pt" border-color="white">
                        <fo:block font-family="Courier" text-align="right" font-weight="bold">
                            <xsl:value-of select="format-number(exsl:node-set($HGGesamt)-exsl:node-set($HGGesperrt),'#.00')"/>&#160;&#8364;                             
                        </fo:block>
                    </fo:table-cell>
<fo:table-cell padding="3pt" display-align="center" border-style="solid" border-width="1pt" border-color="white">
                        <fo:block font-family="Courier" text-align="right" font-weight="bold">
                            <xsl:value-of select="format-number(exsl:node-set($EGGesamt)-exsl:node-set($EGGesperrt),'#.00')"/>&#160;&#8364;                             
                        </fo:block>
                    </fo:table-cell>

打印关于HGGesamt和HGGesperrt的第一行代码的结果,结果是正确的。 对于EGGesamt-EGGesperrt,它只打印&#34; NaN&#34;

有人有想法,为什么?

2 个答案:

答案 0 :(得分:1)

<formattedEgGesamt>270.​94</formattedEgGesamt>的数据中似乎有一个带有Unicode 8203(U + 200B,零宽度空间)的非数字字符。小数点后。这样,数字计算就会产生NaN。

答案 1 :(得分:1)

正如@ martin-honnen所说。

还有更简单的方法来获得您想要的数字,例如。

<xsl:variable name="HGGesamt" select="/Basis/PersonenkontoDTO/formattedHgGesamt"/>
<xsl:variable name="HGGesperrt" select="/Basis/PersonenkontoDTO/formattedHgGesperrt"/>
<xsl:variable name="EGGesamt" select="/Basis/PersonenkontoDTO/formattedEgGesamt"/>
<xsl:variable name="EGGesperrt" select="/Basis/PersonenkontoDTO/formattedEgGesperrt"/>

<xsl:value-of select="format-number($HGGesamt - $HGGesperrt,'#.00')"/>&#160;&#8364;
...
<xsl:value-of select="format-number($EGGesamt - $EGGesperrt,'#.00')"/>&#160;&#8364;