XSLT1.0如何在select条件下用0(零)替换空值或空白值
如果nodevalue为空或为空,我希望将该值替换为0(零)。 问题是,在此计算中,如果任何nodevalue为空或为空,则会给出一个结果。e、 g.选择“10-2+5-2--4”按以下方式尝试:XSLT1.0如何在select条件下用0(零)替换空值或空白值,xslt,xslt-1.0,Xslt,Xslt 1.0,如果nodevalue为空或为空,我希望将该值替换为0(零)。 问题是,在此计算中,如果任何nodevalue为空或为空,则会给出一个结果。e、 g.选择“10-2+5-2--4”按以下方式尝试: <xsl:call-template name="SetNetTemplate"> <xsl:with-param name="xyz" select="$node1value + $node2value
<xsl:call-template name="SetNetTemplate">
<xsl:with-param name="xyz" select="$node1value
+ $node2value
+ $node3value
- $node4value
- $node5value
- $node6value"/>
</xsl:call-template>
编辑 请注意,上述只是一个“可爱的小把戏”,旨在避免适当而直接的解决方案的冗长,从而实现这一点:
<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>
etc对我来说,这很有效:
<xsl:with-param name="xyz" select="concat(0, $node1value)
+ concat(0, $node2value)
+ concat(0, $node3value)..."/>
我不想将0连接到我的数字。如果nodevalue为空或为空,我想将其替换为0。@ManishMawatwal恐怕您没有抓住要点:如果值为空(这是您想要的),则在值的左侧添加0将导致0,并且在值包含数字时不会产生任何效果。除非那个数字是负数——在这种情况下,这将完全爆炸(没有双关语,但无论如何有一个是很好的)。如果你在翻译中遗漏了一个0:
translate(number($node1value),'aN','00')
——需要额外的0来匹配aN中的N。@Barney不,这里没有遗漏任何东西。其想法是将“NaN”(而不是“aN”)中的“a”替换为0,并删除两个“N”字符,以便最终结果是单个0字符。你的版本会返回“000”。对-我明白了。是的,我的版本确实返回了“000”,它仍然是零,但没有你的那么简洁。这与上面迈克尔·凯给出的答案几乎相同,并且具有相同的限制。
number(concat('0',$nodeValue))