2011-08-29 71 views
2

我的場景是xml-idoc,其中在idoc中我使用了值爲000001的重複值爲E1EDP01-POSEX。我發現如何刪除重複節點,但在此之前我需要在E1EDP01-MENGE中添加值(例如,exx = 000001和menge = 2500,po​​sex = 000001和menge3000),所以我需要posex = 000001和menge = 5500。刪除重複的節點,並在這些重複節點中添加元素值

正如我用這個代碼

<xsl:template match="E1EDP01[not(generate-id() = generate-id(key('kPOSEX', POSEX)[000001]))]"/> 

據只服用第一節點的值。下面是sameple代碼

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<Invoice> 
    <InvoiceDetail> 
    <ListOfInvoiceItemDetail> 
     <InvoiceItemDetail> 
     <InvoiceBaseItemDetail> 
      <LineItemNum> 
      <BuyerLineItemNum>000002</BuyerLineItemNum> 
      <SellerLineItemNum>000001</SellerLineItemNum> 
      </LineItemNum> 
      <LineItemType> 
      <LineItemTypeCoded>Item</LineItemTypeCoded> 
      </LineItemType> 
      <ItemIdentifiers> 
      <PartNumbers> 
       <SellerPartNumber> 
       <PartNum> 
        <PartID>100356381</PartID> 
       </PartNum> 
       </SellerPartNumber> 
       <BuyerPartNumber> 
       <PartNum> 
        <PartID>517801</PartID> 
       </PartNum> 
       </BuyerPartNumber> 
      </PartNumbers> 
      </ItemIdentifiers> 
      <TotalQuantity> 
      <Quantity> 
       <QuantityValue>40320.0</QuantityValue> 
       <UnitOfMeasurement> 
       <UOMCoded>EA</UOMCoded> 
       </UnitOfMeasurement> 
      </Quantity> 
      </TotalQuantity> 
      <LineItemReferences> 
      <InvoiceReferences> 
       <PurchaseOrderReference> 
       <PurchaseOrderNumber> 
        <Reference> 
        <RefNum>0045486186</RefNum> 
        </Reference> 
       </PurchaseOrderNumber> 
       <PurchaseOrderDate>20110825T040000.000Z</PurchaseOrderDate> 
       <PurchaseOrderLineItemNumber>000002</PurchaseOrderLineItemNumber> 
       </PurchaseOrderReference> 
       <ASNNumber> 
       <Reference> 
        <RefNum>0805548867</RefNum> 
       </Reference> 
       </ASNNumber> 
       <OtherInvoiceReferences> 
       <ListOfReferenceCoded> 
        <ReferenceCoded> 
        <ReferenceTypeCoded>Other</ReferenceTypeCoded> 
        <ReferenceTypeCodedOther>SalesOrderNumber</ReferenceTypeCodedOther> 
        <PrimaryReference> 
         <Reference> 
         <RefNum>0006543680</RefNum> 
         </Reference> 
        </PrimaryReference> 
        <SupportingReference> 
         <Reference> 
         <RefNum>000002</RefNum> 
         </Reference> 
        </SupportingReference> 
        </ReferenceCoded> 
       </ListOfReferenceCoded> 
       </OtherInvoiceReferences> 
      </InvoiceReferences> 
      </LineItemReferences> 
     </InvoiceBaseItemDetail> 
     <InvoicePricingDetail> 
      <ListOfPrice> 
      <Price> 
       <UnitPrice> 
       <UnitPriceValue>115.11</UnitPriceValue> 
       </UnitPrice> 
      </Price> 
      </ListOfPrice> 
      <Tax> 
      <TaxFunctionQualifierCoded>Tax</TaxFunctionQualifierCoded> 
      <TaxCategoryCoded>StandardRate</TaxCategoryCoded> 
      <TaxTypeCoded>Other</TaxTypeCoded> 
      <TaxTypeCodedOther> 
       <Identifier> 
       <Agency> 
        <AgencyCoded>Other</AgencyCoded> 
        <AgencyCodedOther>Not Specified</AgencyCodedOther> 
       </Agency> 
       <Ident>National Tax</Ident> 
       </Identifier> 
      </TaxTypeCodedOther> 
      <TaxPercent>10.000</TaxPercent> 
      <TaxAmount>464.12</TaxAmount> 
      </Tax> 
      <InvoiceCurrencyTotalValue> 
      <MonetaryValue> 
       <MonetaryAmount>4641.24</MonetaryAmount> 
      </MonetaryValue> 
      </InvoiceCurrencyTotalValue> 
     </InvoicePricingDetail> 
     </InvoiceItemDetail> 
     <InvoiceItemDetail> 
     <InvoiceBaseItemDetail> 
      <LineItemNum> 
      <BuyerLineItemNum>000001</BuyerLineItemNum> 
      <SellerLineItemNum>000002</SellerLineItemNum> 
      </LineItemNum> 
      <LineItemType> 
      <LineItemTypeCoded>Item</LineItemTypeCoded> 
      </LineItemType> 
      <ItemIdentifiers> 
      <PartNumbers> 
       <SellerPartNumber> 
       <PartNum> 
        <PartID>100351756</PartID> 
       </PartNum> 
       </SellerPartNumber> 
       <BuyerPartNumber> 
       <PartNum> 
        <PartID>462088</PartID> 
       </PartNum> 
       </BuyerPartNumber> 
      </PartNumbers> 
      </ItemIdentifiers> 
      <TotalQuantity> 
      <Quantity> 
       <QuantityValue>37632.0</QuantityValue> 
       <UnitOfMeasurement> 
       <UOMCoded>EA</UOMCoded> 
       </UnitOfMeasurement> 
      </Quantity> 
      </TotalQuantity> 
      <LineItemReferences> 
      <InvoiceReferences> 
       <PurchaseOrderReference> 
       <PurchaseOrderNumber> 
        <Reference> 
        <RefNum>0045486186</RefNum> 
        </Reference> 
       </PurchaseOrderNumber> 
       <PurchaseOrderDate>20110825T040000.000Z</PurchaseOrderDate> 
       <PurchaseOrderLineItemNumber>000001</PurchaseOrderLineItemNumber> 
       </PurchaseOrderReference> 
       <ASNNumber> 
       <Reference> 
        <RefNum>0805548867</RefNum> 
       </Reference> 
       </ASNNumber> 
       <OtherInvoiceReferences> 
       <ListOfReferenceCoded> 
        <ReferenceCoded> 
        <ReferenceTypeCoded/> 
        <PrimaryReference> 
         <Reference> 
         <RefNum>0006543680</RefNum> 
         </Reference> 
        </PrimaryReference> 
        <SupportingReference> 
         <Reference> 
         <RefNum>000003</RefNum> 
         </Reference> 
        </SupportingReference> 
        </ReferenceCoded> 
       </ListOfReferenceCoded> 
       </OtherInvoiceReferences> 
      </InvoiceReferences> 
      </LineItemReferences> 
     </InvoiceBaseItemDetail> 
     <InvoicePricingDetail> 
      <ListOfPrice> 
      <Price> 
       <UnitPrice> 
       <UnitPriceValue>119.79</UnitPriceValue> 
       </UnitPrice> 
      </Price> 
      </ListOfPrice> 
      <Tax> 
      <TaxFunctionQualifierCoded>Tax</TaxFunctionQualifierCoded> 
      <TaxCategoryCoded>StandardRate</TaxCategoryCoded> 
      <TaxTypeCoded>Other</TaxTypeCoded> 
      <TaxTypeCodedOther> 
       <Identifier> 
       <Agency> 
        <AgencyCoded>Other</AgencyCoded> 
        <AgencyCodedOther>Not Specified</AgencyCodedOther> 
       </Agency> 
       <Ident>National Tax</Ident> 
       </Identifier> 
      </TaxTypeCodedOther> 
      <TaxPercent>10.000</TaxPercent> 
      <TaxAmount>450.79</TaxAmount> 
      </Tax> 
      <InvoiceCurrencyTotalValue> 
      <MonetaryValue> 
       <MonetaryAmount>4507.94</MonetaryAmount> 
      </MonetaryValue> 
      </InvoiceCurrencyTotalValue> 
     </InvoicePricingDetail> 
     </InvoiceItemDetail> 
     <InvoiceItemDetail> 
     <InvoiceBaseItemDetail> 
      <LineItemNum> 
      <BuyerLineItemNum>000003</BuyerLineItemNum> 
      <SellerLineItemNum>000003</SellerLineItemNum> 
      </LineItemNum> 
      <LineItemType> 
      <LineItemTypeCoded>Item</LineItemTypeCoded> 
      </LineItemType> 
      <ItemIdentifiers> 
      <PartNumbers> 
       <SellerPartNumber> 
       <PartNum> 
        <PartID>100356381</PartID> 
       </PartNum> 
       </SellerPartNumber> 
       <BuyerPartNumber> 
       <PartNum> 
        <PartID>517801</PartID> 
       </PartNum> 
       </BuyerPartNumber> 
      </PartNumbers> 
      </ItemIdentifiers> 
      <TotalQuantity> 
      <Quantity> 
       <QuantityValue>60480.0</QuantityValue> 
       <UnitOfMeasurement> 
       <UOMCoded>EA</UOMCoded> 
       </UnitOfMeasurement> 
      </Quantity> 
      </TotalQuantity> 
      <LineItemReferences> 
      <InvoiceReferences> 
       <PurchaseOrderReference> 
       <PurchaseOrderNumber> 
        <Reference> 
        <RefNum>0045486186</RefNum> 
        </Reference> 
       </PurchaseOrderNumber> 
       <PurchaseOrderDate>20110825T040000.000Z</PurchaseOrderDate> 
       <PurchaseOrderLineItemNumber>000003</PurchaseOrderLineItemNumber> 
       </PurchaseOrderReference> 
       <ASNNumber> 
       <Reference> 
        <RefNum>0805548867</RefNum> 
       </Reference> 
       </ASNNumber> 
       <OtherInvoiceReferences> 
       <ListOfReferenceCoded> 
        <ReferenceCoded> 
        <ReferenceTypeCoded/> 
        <PrimaryReference> 
         <Reference> 
         <RefNum>0006543680</RefNum> 
         </Reference> 
        </PrimaryReference> 
        <SupportingReference> 
         <Reference> 
         <RefNum>000004</RefNum> 
         </Reference> 
        </SupportingReference> 
        </ReferenceCoded> 
       </ListOfReferenceCoded> 
       </OtherInvoiceReferences> 
      </InvoiceReferences> 
      </LineItemReferences> 
     </InvoiceBaseItemDetail> 
     <InvoicePricingDetail> 
      <ListOfPrice> 
      <Price> 
       <UnitPrice> 
       <UnitPriceValue>115.11</UnitPriceValue> 
       </UnitPrice> 
      </Price> 
      </ListOfPrice> 
      <Tax> 
      <TaxFunctionQualifierCoded>Tax</TaxFunctionQualifierCoded> 
      <TaxCategoryCoded>StandardRate</TaxCategoryCoded> 
      <TaxTypeCoded>Other</TaxTypeCoded> 
      <TaxTypeCodedOther> 
       <Identifier> 
       <Agency> 
        <AgencyCoded>Other</AgencyCoded> 
        <AgencyCodedOther>Not Specified</AgencyCodedOther> 
       </Agency> 
       <Ident>National Tax</Ident> 
       </Identifier> 
      </TaxTypeCodedOther> 
      <TaxPercent>10.000</TaxPercent> 
      <TaxAmount>696.19</TaxAmount> 
      </Tax> 
      <InvoiceCurrencyTotalValue> 
      <MonetaryValue> 
       <MonetaryAmount>6961.85</MonetaryAmount> 
      </MonetaryValue> 
      </InvoiceCurrencyTotalValue> 
     </InvoicePricingDetail> 
     </InvoiceItemDetail> 
     <InvoiceItemDetail> 
     <InvoiceBaseItemDetail> 
      <LineItemNum> 
      <BuyerLineItemNum>000001</BuyerLineItemNum> 
      <SellerLineItemNum>000004</SellerLineItemNum> 
      </LineItemNum> 
      <LineItemType> 
      <LineItemTypeCoded>Item</LineItemTypeCoded> 
      </LineItemType> 
      <ItemIdentifiers> 
      <PartNumbers> 
       <SellerPartNumber> 
       <PartNum> 
        <PartID>100351756</PartID> 
       </PartNum> 
       </SellerPartNumber> 
       <BuyerPartNumber> 
       <PartNum> 
        <PartID>462088</PartID> 
       </PartNum> 
       </BuyerPartNumber> 
      </PartNumbers> 
      </ItemIdentifiers> 
      <TotalQuantity> 
      <Quantity> 
       <QuantityValue>56448.0</QuantityValue> 
       <UnitOfMeasurement> 
       <UOMCoded>EA</UOMCoded> 
       </UnitOfMeasurement> 
      </Quantity> 
      </TotalQuantity> 
      <LineItemReferences> 
      <InvoiceReferences> 
       <PurchaseOrderReference> 
       <PurchaseOrderNumber> 
        <Reference> 
        <RefNum>0045486186</RefNum> 
        </Reference> 
       </PurchaseOrderNumber> 
       <PurchaseOrderDate>20110825T040000.000Z</PurchaseOrderDate> 
       <PurchaseOrderLineItemNumber>000001</PurchaseOrderLineItemNumber> 
       </PurchaseOrderReference> 
       <ASNNumber> 
       <Reference> 
        <RefNum>0805548867</RefNum> 
       </Reference> 
       </ASNNumber> 
       <OtherInvoiceReferences> 
       <ListOfReferenceCoded> 
        <ReferenceCoded> 
        <ReferenceTypeCoded/> 
        <PrimaryReference> 
         <Reference> 
         <RefNum>0006543680</RefNum> 
         </Reference> 
        </PrimaryReference> 
        <SupportingReference> 
         <Reference> 
         <RefNum>000005</RefNum> 
         </Reference> 
        </SupportingReference> 
        </ReferenceCoded> 
       </ListOfReferenceCoded> 
       </OtherInvoiceReferences> 
      </InvoiceReferences> 
      </LineItemReferences> 
     </InvoiceBaseItemDetail> 
     <InvoicePricingDetail> 
      <ListOfPrice> 
      <Price> 
       <UnitPrice> 
       <UnitPriceValue>119.79</UnitPriceValue> 
       </UnitPrice> 
      </Price> 
      </ListOfPrice> 
      <Tax> 
      <TaxFunctionQualifierCoded>Tax</TaxFunctionQualifierCoded> 
      <TaxCategoryCoded>StandardRate</TaxCategoryCoded> 
      <TaxTypeCoded>Other</TaxTypeCoded> 
      <TaxTypeCodedOther> 
       <Identifier> 
       <Agency> 
        <AgencyCoded>Other</AgencyCoded> 
        <AgencyCodedOther>Not Specified</AgencyCodedOther> 
       </Agency> 
       <Ident>National Tax</Ident> 
       </Identifier> 
      </TaxTypeCodedOther> 
      <TaxPercent>10.000</TaxPercent> 
      <TaxAmount>676.19</TaxAmount> 
      </Tax> 
      <InvoiceCurrencyTotalValue> 
      <MonetaryValue> 
       <MonetaryAmount>6761.91</MonetaryAmount> 
      </MonetaryValue> 
      </InvoiceCurrencyTotalValue> 
     </InvoicePricingDetail> 
     </InvoiceItemDetail> 
    </ListOfInvoiceItemDetail> 
    </InvoiceDetail> 
    <InvoiceSummary> 
    <NumberOfLines>4.0</NumberOfLines> 
    <InvoiceTotals> 
     <NetValue> 
     <MonetaryValue> 
      <MonetaryAmount>22872.94</MonetaryAmount> 
     </MonetaryValue> 
     </NetValue> 
     <GrossValue> 
     <MonetaryValue> 
      <MonetaryAmount>25160.23</MonetaryAmount> 
     </MonetaryValue> 
     </GrossValue> 
     <TaxValue> 
     <MonetaryValue> 
      <MonetaryAmount>2287.29</MonetaryAmount> 
     </MonetaryValue> 
     </TaxValue> 
     <TotalAmountPayable> 
     <MonetaryValue> 
      <MonetaryAmount>25160.23</MonetaryAmount> 
     </MonetaryValue> 
     </TotalAmountPayable> 
    </InvoiceTotals> 
    <ListOfTaxSummary> 
     <TaxSummary> 
     <Tax> 
      <TaxFunctionQualifierCoded>Tax</TaxFunctionQualifierCoded> 
      <TaxCategoryCoded>StandardRate</TaxCategoryCoded> 
      <TaxTypeCoded>Other</TaxTypeCoded> 
      <TaxTypeCodedOther> 
      <Identifier> 
       <Agency> 
       <AgencyCoded>Other</AgencyCoded> 
       <AgencyCodedOther>Not specified</AgencyCodedOther> 
       </Agency> 
       <Ident>NationalTax</Ident> 
      </Identifier> 
      </TaxTypeCodedOther> 
      <TaxPercent>10.000</TaxPercent> 
      <TaxAmount>2287.29</TaxAmount> 
     </Tax> 
     </TaxSummary> 
    </ListOfTaxSummary> 
    </InvoiceSummary> 
</Invoice> 

進出賣出期權

<?xml version="1.0" encoding="UTF-8"?> 
<INVOIC01> 
    <IDOC BEGIN="1"> 
    <EDI_DC40 SEGMENT="1"> 
     <E1EDP01 SEGMENT="1"> 
     <POSEX>000002</POSEX> 
     <MENGE>40320.0</MENGE> 
     <MENEE>EA</MENEE> 
     <VPREI>115.11</VPREI> 
     </E1EDP01> 
    <E1EDP01 SEGMENT="1"> 
     <POSEX>000001</POSEX> 
     <MENGE>37632.0</MENGE> 
     <MENEE>EA</MENEE> 
     <VPREI>119.79</VPREI> 
     </E1EDP01> 
    <E1EDP01 SEGMENT="1"> 
     <POSEX>000003</POSEX> 
     <MENGE>60480.0</MENGE> 
     <MENEE>EA</MENEE> 
     <VPREI>115.11</VPREI> 
         </E1EDP01> 
    <E1EDP01 SEGMENT="1"> 
     <POSEX>000001</POSEX> 
     <MENGE>56448.0</MENGE> 
     <MENEE>EA</MENEE> 
    </E1EDP01> 
        </IDOC> 
</INVOIC01> 

很抱歉,如果該文件看起來odd..this是我第一次發送的OUTPUTFILE你可以看到E1EDP01在POSEX和猛惡。我需要刪除POSEX重複值(EX應該是000001和MENGE值應該被添加)

我希望這是有道理的。

+0

問得好,+1。查看我的答案,獲得完整,簡單和通用的解決方案,只使用真正必需的元素名稱。 –

回答

1

該轉化

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="kByP" match="E1EDP01" use="POSEX"/> 

<xsl:template match="node()|@*"> 
    <xsl:param name="pNewValue"/> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"> 
     <xsl:with-param name="pNewValue" select="$pNewValue"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match= 
    "E1EDP01[generate-id() 
      = 
      generate-id(key('kByP', POSEX)[1]) 
      ]"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"> 
     <xsl:with-param name="pNewValue" select= 
     "sum(key('kByP', POSEX)/MENGE)"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="E1EDP01"/> 

<xsl:template match="MENGE/text()"> 
    <xsl:param name="pNewValue"/> 
    <xsl:value-of select="$pNewValue"/> 
</xsl:template> 
</xsl:stylesheet> 

當所提供的XML文檔(略微校正,以使其成爲良好的形成)施加:

<INVOIC01> 
    <IDOC BEGIN="1"> 
     <EDI_DC40 SEGMENT="1"/> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000002</POSEX> 
      <MENGE>40320.0</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>115.11</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000001</POSEX> 
      <MENGE>37632.0</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>119.79</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000003</POSEX> 
      <MENGE>60480.0</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>115.11</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000001</POSEX> 
      <MENGE>56448.0</MENGE> 
      <MENEE>EA</MENEE> 
     </E1EDP01> 
    </IDOC> 
</INVOIC01> 

產生想要的,正確的結果

<INVOIC01> 
    <IDOC BEGIN="1"> 
     <EDI_DC40 SEGMENT="1"/> 
     <E1EDP01 SEGMENT="1"> 
     <POSEX>000002</POSEX> 
     <MENGE>40320</MENGE> 
     <MENEE>EA</MENEE> 
     <VPREI>115.11</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
     <POSEX>000001</POSEX> 
     <MENGE>94080</MENGE> 
     <MENEE>EA</MENEE> 
     <VPREI>119.79</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
     <POSEX>000003</POSEX> 
     <MENGE>60480</MENGE> 
     <MENEE>EA</MENEE> 
     <VPREI>115.11</VPREI> 
     </E1EDP01> 
    </IDOC> 
</INVOIC01> 

說明

  1. 身份規則副本的每個節點 「原樣」。我添加了一個名爲pNewValue的參數,該參數僅由匹配MENGE的任何文本節點子級的模板使用,以提供要輸出的新值(組中所有MENGE的總和)。

  2. 使用Muenchian分組方法

  3. 通過不同的@empo的解決方案,我們並不需要知道其他元素的名稱及其順序:)

+0

非常感謝..拯救了我的生命 – SAP

+0

@Akhil:不客氣。 –

0

所以你想從iDoc XML中刪除重複的POSEX?看上去好像是因爲你用

<xsl:template match="E1EDP01[not(generate-id() = generate-id(key('kPOSEX', POSEX)[000001]))]"/> 

我適應這一點:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 

<xsl:key name="kPOSEX" match="E1EDP01" use="POSEX"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

<xsl:template match="E1EDP01[not(generate-id() = generate-id(key('kPOSEX', POSEX)[1]))]"> 

</xsl:template> 

</xsl:stylesheet> 

,並應用到你的iDoc XML例如我得到這樣的輸出:

<?xml version="1.0" encoding="UTF-8"?><INVOIC01> 
<IDOC BEGIN="1"> 
    <EDI_DC40 SEGMENT="1"/> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000002</POSEX> 
      <MENGE>40320.0</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>115.11</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000001</POSEX> 
      <MENGE>37632.0</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>119.79</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000003</POSEX> 
      <MENGE>60480.0</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>115.11</VPREI> 
     </E1EDP01> 
</IDOC> 
</INVOIC01> 

重複的(POSEX = 000001)被刪除。 這就是你想要的嗎?

問候, 彼得

+0

嗨,彼得我應用相同的邏輯,但我需要總結重複posex.me的元素重複下面的代碼。感謝您的答覆 – SAP

0

我需要在POSEX刪除重複值(EX應該是000001和應加門奇值)

你想組由POSEX和總和值爲MENGE爲每個組。

下變換做任務:

  • 使用身份規則的簡化輸出生成
  • 使用Meunchian方法來族元素的要求
  • 使用鍵來計算通緝款項。

我已經額外排序元素POSEX

[XSLT 1。0]

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:key name="kPOSEX" match="E1EDP01" use="POSEX"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="EDI_DC40"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* 
       | 
       E1EDP01[generate-id() 
       = generate-id(key('kPOSEX', POSEX)[1])]"> 
       <xsl:sort select="POSEX" data-type="number"/> 
      </xsl:apply-templates> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="E1EDP01"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|POSEX"/> 
      <MENGE> 
       <xsl:value-of select="sum(key('kPOSEX',POSEX)/MENGE)"/> 
      </MENGE> 
      <xsl:apply-templates select="MENEE|VPREI"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

與輸出:

<INVOIC01> 
    <IDOC BEGIN="1"> 
     <EDI_DC40 SEGMENT="1"> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000001</POSEX> 
      <MENGE>94080</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>119.79</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000002</POSEX> 
      <MENGE>40320</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>115.11</VPREI> 
     </E1EDP01> 
     <E1EDP01 SEGMENT="1"> 
      <POSEX>000003</POSEX> 
      <MENGE>60480</MENGE> 
      <MENEE>EA</MENEE> 
      <VPREI>115.11</VPREI> 
     </E1EDP01> 
     </EDI_DC40> 
    </IDOC> 
</INVOIC01>