Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT:cumulative Sum(有条件的)_Xslt - Fatal编程技术网

XSLT:cumulative Sum(有条件的)

XSLT:cumulative Sum(有条件的),xslt,Xslt,我需要使用XSLT进行条件求和。每个“SKU”的“Oty”之和应仅针对“提供商”节点中列出的提供商进行计算。在提供的示例中,应跳过providerCode 4的数量,因为其不在“Providers”列表中。我仅限于使用XSLT1.0 我将感谢任何帮助。谢谢 下面是示例XML <?xml version="1.0" encoding="UTF-8"?> <Root> <Providers> <ProviderCode>1<

我需要使用XSLT进行条件求和。每个“SKU”的“Oty”之和应仅针对“提供商”节点中列出的提供商进行计算。在提供的示例中,应跳过providerCode 4的数量,因为其不在“Providers”列表中。我仅限于使用XSLT1.0

我将感谢任何帮助。谢谢

下面是示例XML

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <Providers>
        <ProviderCode>1</ProviderCode>
        <ProviderCode>2</ProviderCode>
        <ProviderCode>3</ProviderCode>        
    </Providers>
    <SKU>
        <SKU>XYZ</SKU>
        <Description>XYZ Description</Description>
        <Provider>
            <ProviderCode>1</ProviderCode>
            <Qty>100</Qty>
        </Provider>
        <Provider>
            <ProviderCode>2</ProviderCode>
            <Qty>67</Qty>
        </Provider>
        <Provider>
            <ProviderCode>3</ProviderCode>
            <Qty>74</Qty>
        </Provider>
        <Provider>
            <ProviderCode>4</ProviderCode>
            <Qty>62</Qty>
        </Provider>    
    </SKU>
    <SKU>
        <SKU>ABC</SKU>
        <Description>ABC Description</Description>
        <Provider>
            <ProviderCode>1</ProviderCode>
            <Qty>20</Qty>
        </Provider>
        <Provider>
            <ProviderCode>2</ProviderCode>
            <Qty>77</Qty>
        </Provider>
        <Provider>
            <ProviderCode>3</ProviderCode>
            <Qty>42</Qty>
        </Provider>    
        <Provider>
            <ProviderCode>4</ProviderCode>
            <Qty>631</Qty>
        </Provider>    
    </SKU>    
</Root>

1.
2.
3.
XYZ
XYZ描述
1.
100
2.
67
3.
74
4.
62
基础知识
ABC说明
1.
20
2.
77
3.
42
4.
631
这是所需的输出

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <SKU>
        <SKU>XYZ</SKU>
        <Qty>241</Qty>
    </SKU>
    <SKU>
        <SKU>ABC</SKU>
        <Qty>139</Qty>
    </SKU>    
</Root>

XYZ
241
基础知识
139

您可以通过比较
sum(Provider[ProviderCode=//Providers/ProviderCode]/Qty)
或使用键在所需节点上使用
sum

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes"/>

<xsl:key name="prov" match="Providers/ProviderCode" use="."/>

<xsl:template match="Root">
  <xsl:copy>
    <xsl:apply-templates select="SKU"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="Root/SKU">
  <xsl:copy>
    <xsl:copy-of select="SKU"/>
    <Qty><xsl:value-of select="sum(Provider[key('prov', ProviderCode)]/Qty)"/></Qty>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>


和代码xslt?。会有帮助的。+1个好答案。开头的一个小错误是:XPath应该是
sum(Provider[ProviderCode=//Providers/ProviderCode]/Qty)
。太好了!!对于最新的更改总和(提供程序[ProviderCode=//提供程序/ProviderCode]/Qty),总和值是正确的。再次感谢@user2554529,内联路径示例不正确,但在答案的第一个版本中,包含关键解决方案的完整代码示例是正确的,而且效率更高。@MartinHonnen,我在上发布了另一个问题,该问题使用您的答案作为“基础”。如果你能在里面提供你的意见,那就太好了。谢谢附言:我不能在这里发表评论,因为代码示例超过了字符数。@MartinHonnen,感谢您对这些问题的帮助。我接受了你的回答。