xslt 1.0如何在选择条件下将空值或空值替换为0(零)

时间:2014-02-25 15:12:13

标签: xslt xslt-1.0

<xsl:call-template name="SetNetTemplate">
<xsl:with-param name="xyz" select="$node1value
                                 + $node2value
                                 + $node3value
                                 - $node4value
                                 - $node5value
                                 - $node6value"/>
</xsl:call-template>

如果nodevalue为空或空白,我想用0(零)替换该值。    问题是,在此计算中,如果任何nodevalue为空或空白,则它给出NaN结果。例如选择&#34; 10-2 + 5-2- -4&#34;

3 个答案:

答案 0 :(得分:7)

以这种方式尝试:

<xsl:with-param name="xyz" select="translate(number($node1value), 'aN', '0')
                                 + translate(number($node2value), 'aN', '0')
                                 + translate(number($node3value), 'aN', '0')
                                   ...
                                 - translate(number($node6value), 'aN', '0')"/>

编辑

请注意,上面只是一个“可爱的技巧”,旨在避免这样做的正确和直接的解决方案的冗长:

<xsl:choose>
    <xsl:when test="number($node1value)">
        <xsl:value-of select="$node1value" />
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="0" />
    </xsl:otherwise>
</xsl:choose>
在尝试将它们视为数字之前,请先将

添加到每个操作数中。

答案 1 :(得分:4)

尝试

<xsl:with-param name="xyz" select="concat(0, $node1value)
                                 + concat(0, $node2value)
                                 + concat(0, $node3value)..."/>

答案 2 :(得分:1)

这对我来说很有效:

number(concat('0',$nodeValue))