我正在处理 XSLT 报告,需要在物料清单中查找组件的总数。输入 XML 由项目和链接组成。对于每个项目,我需要获取使用它的每个链接的数量。为了使事情复杂化,我需要提升层次结构并将数量乘以父数量。该示例仅显示了两个级别,但可能比这更深。例如,项目组件 1 使用 5 个组件 2 和 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>
任何帮助,将不胜感激。