<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>
Run Code Online (Sandbox Code Playgroud)
总的来说,由于像<CREDIT_DER />, <ORIG_EXP_PRE_CONV /> 等等空元素,我得到空值.
如何处理,以便我可以获得数值
请建议
这是一个小例子,其中@DevNull答案中的技巧无济于事:
<a>
<b>5</b>
<c>
<d></d>
<e>1</e>
<f>2</f>
</c>
</a>
Run Code Online (Sandbox Code Playgroud)
我们希望:/a/c/d + /a/c/f
为了保证我们得到总和,虽然其中一些可能是空的或不是数字,但使用:
sum((/a/c/d|/a/c/f)[number(.) = number(.)])
Run Code Online (Sandbox Code Playgroud)
说明:
XPath表达式: (/a/c/d|/a/c/f)[number(.) = number(.)]
仅选择所有联合节点的值,其值为数字.因此,该sum()函数将仅提供数字参数,不会产生NaN.
number(.) = number(.)只有在.数字时,表达式才为真.
在这里,我们使用number(somethingNon-Number)的NaN
这NaN并不等于任何事情NaN.
<total><xsl:value-of select="sum(/LIST_R7P1_1/R7P1_1/*/text())"/></total>
Run Code Online (Sandbox Code Playgroud)
您还需要修复您的 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2057 次 |
| 最近记录: |