如何在使用xslt进行元素求和期间处理空元素

use*_*727 5 xml xslt

<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 /> 等等空元素,我得到空值.

如何处理,以便我可以获得数值

请建议

Dim*_*hev 8

这是一个小例子,其中@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.


Dan*_*ley 2

<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)