将2个过滤后的数字和相加

时间:2019-04-18 17:22:53

标签: xslt xslt-1.0 xslt-grouping

根据这个示例,我需要对两个数字的乘法求和

<test>
<stop>
    <id>1</id>
    <unit_id>1</unit_id>
    <unit_id>2</unit_id>
</stop>
<stop>
    <id>2</id>
    <unit_id>1</unit_id>
    <unit_id>3</unit_id>
</stop>
<unit>
    <id>1</id>
    <count>2</count>
    <value>1</value>
</unit>
<unit>
    <id>2</id>
    <count>4</count>
    <value>1</value>
</unit>
<unit>
    <id>3</id>
    <count>2</count>
    <value>3</value>
</unit>

我想要得到的结果是下面的那个

<test>
<stop>
    <id>1</id>
    <sum>6</sum>
</stop>
<stop>
    <id>2</id>
    <sum>10</sum>
</stop>

有提示如何获得它吗?

我尝试了这个示例,但是多重乘法的总和不起作用,只适用于总和或乘法,但不能同时适用两者

<xsl:template match="stop">
<xsl:variable name="ship_unit" select="id"/>
<xsl:value-of select="sum(following-sibling::unit[id=$ship_unit]/count*following-sibling::unit[id=$ship_unit]/value)"/>

1 个答案:

答案 0 :(得分:0)

如果我猜对了,您想要执行以下操作:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:key name="unit" match="unit" use="id" />

<xsl:template match="/test">
    <xsl:copy>
        <xsl:for-each select="stop">
            <xsl:variable name="unit1" select="key('unit', unit_id[1])" />
            <xsl:variable name="unit2" select="key('unit', unit_id[2])" />
            <xsl:copy>
                <xsl:copy-of select="id"/>
                <sum>
                    <xsl:value-of select="$unit1/count * $unit1/value + $unit2/count * $unit2/value" />
                </sum>
            </xsl:copy>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

但是,将其应用于您的输入示例的结果将是:

<?xml version="1.0" encoding="utf-8"?>
<test>
  <stop>
    <id>1</id>
    <sum>6</sum>
  </stop>
  <stop>
    <id>2</id>
    <sum>8</sum>
  </stop>
</test>

不是您发布的内容。