現在、XSLT 内で NaN エラーが発生しています。注文したすべての製品とその数量の合計値または収益を取得したいと考えています。
XML:
<customers>
<customer>
<customername>John</customername>
</customer>
<invoices>
<invoice>
<invoicenumber>01</invoicenumber>
<products>
<product>
<productname>candy bar</productname>
<productamount>6</productamount
<productcost>2</productcost>
</product>
</products>
</invoice>
<invoice>
<invoicenumber>02</invoicenumber>
<products>
<product>
<productname>choco bar</productname>
<productamount>3</productamount
<productcost>1</productcost>
</product>
</products>
</invoice>
</invoices>
<customer>
<customername>Fritz</customername>
</customer>
<invoices>
<invoice>
<invoicenumber>01</invoicenumber>
<products>
<product>
<productname>Soda</productname>
<productamount>3</productamount
<productcost>2</productcost>
</product>
</products>
</invoice>
<invoice>
<invoicenumber>02</invoicenumber>
<products>
<product>
<productname>lollipop</productname>
<productamount>5</productamount
<productcost>1</productcost>
</product>
</products>
</invoice>
</invoices>
そして、再帰テンプレートを適応させようとしました。
XSL:
Total:
<xsl:call-template name="sumProducts">
<xsl:with-param name="pNodes" select="customers/customer/invoices/invoice/products"/>
<xsl:with-param name="pName1" select="././././././productamount"/>
<xsl:with-param name="pName2" select="././././././productcost"/>
</xsl:call-template>
<xsl:template name="sumProducts">
<xsl:param name="pNodes"/>
<xsl:param name="pName1"/>
<xsl:param name="pName2"/>
<xsl:param name="pAccum" select="0"/>
<xsl:choose>
<xsl:when test="not($pNodes)">
<xsl:value-of select="$pAccum"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="sumProducts">
<xsl:with-param name="pNodes" select="$pNodes[position() > 1]"/>
<xsl:with-param name="pName1" select="$pName1"/>
<xsl:with-param name="pName2" select="$pName2"/>
<xsl:with-param name="pAccum" select="$pAccum + $pNodes[1]/*[name()=$pName1]
* pNodes[1]/*[name()=$pName2]"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
望ましい結果は、合計 = 26 になります。