2013-07-05 105 views
1

我需要使用XSLT進行條件求和。每個「SKU」的「Oty」總和只應計算在「提供者」節點中列出的提供者。在提供的示例中,providerCode 4的數量應該跳過,因爲它不在「Providers」列表中。我僅限於使用XSLT 1.0。XSLT:累積和(有條件)

我將不勝感激任何幫助。謝謝!

這裏是示例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> 

這裏是需要的輸出。

<?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> 
+0

和代碼XSLT?有助於。 –

回答

3

你可以簡單地說,無論是通過比較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> 
+0

+1好答案。開頭一段中有一個小錯字:XPath應該是sum(Provider [ProviderCode = // Providers/ProviderCode]/Qty)'。 – ABach

+0

太棒了!使用最新的變更總和(Provider [ProviderCode = // Providers/ProviderCode]/Qty),總和值是正確的。再次感謝!! – PManual

+0

@ABach,感謝您的糾正,現在在答案中已經修復。 –