XSLTレポートに取り組んでおり、部品表でコンポーネントの合計を見つける必要があります。入力XMLは、アイテムとリンクで構成されます。アイテムごとに、使用されているリンクごとに数量を取得する必要があります。問題を複雑にするために、階層を上って、数量に親数量を掛ける必要があります。この例は2つのレベルしか示していませんが、それよりも深い可能性があります。たとえば、Itemassy1は5つのassy2と1つのネジItemを使用します。各アイテムassy2は2本のネジを使用します。したがって、合計5本のassy2と11本のネジがあります(1本はassy1によって使用され、各assy2は2本(2X5)を使用します)。アイテムの数量を合計する方法はわかりましたが、階層を上に増やす方法はわかりませんでした。
ソースXMLは次のとおりです。
<items>
<item id="93516">
<attrs><attr name="FILE_ID">assy1</attr></attrs>
</item>
<item id="93515">
<attrs><attr name="FILE_ID">assy2</attr></attrs>
</item>
<item id="93514">
<attrs><attr name="FILE_ID">screw</attr></attrs>
</item>
</items>
<links>
<link source="93516" destination="93514">
<attrs><attr name="QUANTITY">5</attr></attrs>
</link>
<link source="93516" destination="93515">
<attrs><attr name="QUANTITY">1</attr></attrs>
</link>
<link source="93515" destination="93514">
<attrs><attr name="QUANTITY">2</attr></attrs>
</link>
</links>
これが私が見つけて量を合計するように適合させたいくつかのコードですが、それは親の量で乗算されません:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="/items/item"/>
</xsl:template>
<xsl:template match="item">
<xsl:value-of select="attrs/attr[@name='FILE_ID']"/> -
<xsl:variable name="item_id" select="@id"/>
<xsl:call-template name="bomQty">
<xsl:with-param name="itemLinks" select="/links/link[@destination=$item_id]"/>
</xsl:call-template> -
</xsl:template>
<xsl:template name="bomQty">
<xsl:param name="itemLinks"/>
<xsl:choose>
<xsl:when test="$itemLinks">
<xsl:variable name="recursive_result">
<xsl:call-template name="bomQty">
<xsl:with-param name="itemLinks" select="$itemLinks[position() > 1]"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="number($itemLinks[1]/attrs/attr[@name='QUANTITY']) + $recursive_result"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="0"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
どんな助けでもいただければ幸いです。