<LIST_R7P1_1>
<R7P1_1>
<ORIG_EXP_PRE_CONV />
<EXP_AFT_CONV >34<EXP_AFT_CONV />
<GUARANTEE_AMOUNT />
<CREDIT_DER />
</R7P1_1>
</LIST_R7P1_1>
<total><xsl:value-of select="LIST_R7P1_1/R7P1_1/ORIG_EXP_PRE_CONV + LIST_R7P1_1/R7P1_1/EXP_AFT_CONV + LIST_R7P1_1/R7P1_1/GUARANTEE_AMOUNT + LIST_R7P1_1/R7P1_1/CREDIT_DER"/></total>
总的来说,由于<CREDIT_DER />, <ORIG_EXP_PRE_CONV />
等空元素
如何处理,以便我可以获得数值
请建议
答案 0 :(得分:8)
这是一个小例子,其中@DevNull答案中的技巧无济于事:
<a>
<b>5</b>
<c>
<d></d>
<e>1</e>
<f>2</f>
</c>
</a>
我们想要:/a/c/d + /a/c/f
为了保证我们得到总和,虽然其中一些可能是空的或不是数字,但请使用:
sum((/a/c/d|/a/c/f)[number(.) = number(.)])
<强>解释强>:
XPath表达式:(/a/c/d|/a/c/f)[number(.) = number(.)]
仅选择所有联合节点的值,其值为数字。因此,sum()
函数仅提供数字参数,不会生成NaN
。
仅当number(.) = number(.)
是数字时,表达式.
才为真。
我们在这里使用number(somethingNon-Number)
是NaN
并且NaN
不等于任何内容,即使是NaN
。
答案 1 :(得分:2)
<total><xsl:value-of select="sum(/LIST_R7P1_1/R7P1_1/*/text())"/></total>
您还需要修复XML(EXP_AFT_CONV
结束标记):
<LIST_R7P1_1>
<R7P1_1>
<ORIG_EXP_PRE_CONV/>
<EXP_AFT_CONV>34</EXP_AFT_CONV>
<GUARANTEE_AMOUNT/>
<CREDIT_DER/>
</R7P1_1>
</LIST_R7P1_1>