我的XML是
<root>
<source>
<item>
<id>111</id>
<qty>2</qty>
</item>
<item>
<id>222</id>
<qty>1</qty>
</item>
<item>
<id>333</id>
<qty>4</qty>
</item>
</source>
<target>
<record>
<id>111</id>
<price>1000</price>
</record>
<record>
<id>333</id>
<price>500</price>
</record>
</target>
</root>
现在我需要匹配source / item和target / record的id元素,如果匹配我需要产生
来源/项目/数量*目标/记录/价格
一旦产品完成所有匹配的情况,我应该总结所有产品价值,并应得到结果
4000即(所有匹配元素的总和(数量*价格)。)
如何实现这一点,请提前帮助我
答案 0 :(得分:0)
在XSLT 2.0中,您可以执行以下操作:
<xsl:key name="target" match="record" use="id" />
<xsl:template match="/root">
<result>
<xsl:value-of select="sum(source/item[key('target', id)]/(qty * key('target', id)/price))"/>
</result>
</xsl:template>
答案 1 :(得分:0)
我已从Dimitre Novatchev修改此answer以满足您的要求。代码如下:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:key name="target" match="record" use="id" />
<xsl:template match="/">
<xsl:call-template name="sumProducts">
<!-- get only sources with respective equivalent targets -->
<xsl:with-param name="pList" select="*/*/item[key('target', id)]"/>
<!-- a list of target records -->
<xsl:with-param name="pList2" select="*/*/record"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="sumProducts">
<xsl:param name="pList"/>
<xsl:param name="pList2"/>
<xsl:param name="pAccum" select="0"/>
<xsl:choose>
<xsl:when test="$pList">
<xsl:variable name="vHead" select="$pList[1]"/>
<xsl:variable name="vHead2" select="$pList2"/>
<xsl:call-template name="sumProducts">
<xsl:with-param name="pList" select="$pList[position() > 1]"/>
<xsl:with-param name="pList2" select="$pList2"/>
<xsl:with-param name="pAccum"
select="$pAccum + $vHead/qty * $vHead2[id = $vHead/id]/price"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$pAccum"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>