【问题标题】:Multiply 2 filtered numbers and sum将 2 个过滤后的数字相乘并求和
【发布时间】:2019-04-18 17:22:52
【问题描述】:

我需要根据这个例子对两个数字的乘积相加

<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)"/>

【问题讨论】:

  • 请解释一下您是如何得出&lt;sum&gt;10&lt;/sum&gt; 的结果的。我原以为预期的结果是 2 * 1 + 2 * 3 = 8。

标签: xslt xslt-1.0 xslt-grouping


【解决方案1】:

如果我猜对了,你想做这样的事情:

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>

而不是您发布的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多