juls_pro_37: XSLT 1.0 zwei Abfragen kombinieren

Beitrag lesen

Hallo,

hätte mit folg. Part versucht die Duplikate unter "ItemDeliveryInformation" zu entfernen.

  <xsl:key name="packing_slip" match="ItemDeliveryInformation" use="concat(LineNumDeliveryNote, '|', PackingSlipId, '|', DeliveryDate, '|', DeliveredQuantity, '|', RecId_InventTrans)"/>

  <xsl:template match="ItemDeliveryInformation[generate-id() != generate-id(key('packing_slip', concat(LineNumDeliveryNote, '|', PackingSlipId, '|', DeliveryDate, '|', DeliveredQuantity, '|', RecId_InventTrans))[1])]" />

Jedoch muss ich weiters, das daraus entstandene Ergebnis zusammenzählen.

Dies wurde wie folgt gelöst:

<xsl:key name="group" match="ItemDeliveryInformation" use="concat(LineNumDeliveryNote, PackingSlipId, DeliveryDate)"/>

   <xsl:template match="ItemDeliveryInformation">
    <xsl:for-each select="current()[generate-id() = generate-id(key('group', concat(LineNumDeliveryNote, PackingSlipId, DeliveryDate))[1])]">
      <ItemDeliveryInformation>
        <xsl:copy-of select="LineNumDeliveryNote"/>
        <xsl:copy-of select="PackingSlipId"/>
        <xsl:copy-of select="DeliveryDate"/>
        <DeliveredQuantity>
          <xsl:value-of select="format-number(sum(key('group', concat(LineNumDeliveryNote, PackingSlipId, DeliveryDate))/DeliveredQuantity), '#.00')"/>
        </DeliveredQuantity>
      </ItemDeliveryInformation>
    </xsl:for-each>
  </xsl:template>

XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<SALESINVOICE>
  <Interchange>
    <Interchange_Control_Number>5637372751</Interchange_Control_Number>
  </Interchange>
  <HeaderInformation>
    <OrigInvoiceNumber>1</OrigInvoiceNumber>
  </HeaderInformation>
  <LineInformation>
    <Item>
      <LineNum>10</LineNum>
      <GTIN>1234</GTIN>
      <ItemDeliveryInformation>
        <LineNumDeliveryNote>10</LineNumDeliveryNote>
        <PackingSlipId>LS-0000224</PackingSlipId>
        <DeliveryDate>2021-02-01</DeliveryDate>
        <DeliveredQuantity>18.00</DeliveredQuantity>
        <RecId_InventTrans>5644378733</RecId_InventTrans>
        <ShipFromAddressInformation />
      </ItemDeliveryInformation>
      <ItemDeliveryInformation>
        <LineNumDeliveryNote>10</LineNumDeliveryNote>
        <PackingSlipId>LS-0000224</PackingSlipId>
        <DeliveryDate>2021-02-01</DeliveryDate>
        <DeliveredQuantity>18.00</DeliveredQuantity>
        <RecId_InventTrans>5644378716</RecId_InventTrans>
      </ItemDeliveryInformation>
      <ItemDeliveryInformation>
        <LineNumDeliveryNote>10</LineNumDeliveryNote>
        <PackingSlipId>LS-0000224</PackingSlipId>
        <DeliveryDate>2021-02-01</DeliveryDate>
        <DeliveredQuantity>18.00</DeliveredQuantity>
        <RecId_InventTrans>5644378733</RecId_InventTrans>
      </ItemDeliveryInformation>
      <ItemDeliveryInformation>
        <LineNumDeliveryNote>10</LineNumDeliveryNote>
        <PackingSlipId>LS-0000224</PackingSlipId>
        <DeliveryDate>2021-02-01</DeliveryDate>
        <DeliveredQuantity>18.00</DeliveredQuantity>
        <RecId_InventTrans>5644378716</RecId_InventTrans>
      </ItemDeliveryInformation>
      <ItemDeliveryInformation>
        <LineNumDeliveryNote>10</LineNumDeliveryNote>
        <PackingSlipId>LS-0000224</PackingSlipId>
        <DeliveryDate>2021-02-01</DeliveryDate>
        <DeliveredQuantity>18.00</DeliveredQuantity>
        <RecId_InventTrans>5644378733</RecId_InventTrans>
      </ItemDeliveryInformation>
      <ItemDeliveryInformation>
        <LineNumDeliveryNote>10</LineNumDeliveryNote>
        <PackingSlipId>LS-0000224</PackingSlipId>
        <DeliveryDate>2021-02-01</DeliveryDate>
        <DeliveredQuantity>18.00</DeliveredQuantity>
        <RecId_InventTrans>5644378716</RecId_InventTrans>
      </ItemDeliveryInformation>
      <ItemDeliveryInformation>
        <LineNumDeliveryNote>10</LineNumDeliveryNote>
        <PackingSlipId>LS-0000224</PackingSlipId>
        <DeliveryDate>2021-02-01</DeliveryDate>
        <DeliveredQuantity>18.00</DeliveredQuantity>
        <RecId_InventTrans>5644378733</RecId_InventTrans>
      </ItemDeliveryInformation>
      <ItemDeliveryInformation>
        <LineNumDeliveryNote>10</LineNumDeliveryNote>
        <PackingSlipId>LS-0000224</PackingSlipId>
        <DeliveryDate>2021-02-01</DeliveryDate>
        <DeliveredQuantity>18.00</DeliveredQuantity>
        <RecId_InventTrans>5644378716</RecId_InventTrans>
      </ItemDeliveryInformation>
    </Item>
  </LineInformation>
</SALESINVOICE>

XSLT:

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

 <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
 
  <xsl:strip-space elements="*" />

  
  <xsl:key name="packing_slip" match="ItemDeliveryInformation" use="concat(LineNumDeliveryNote, '|', PackingSlipId, '|', DeliveryDate, '|', DeliveredQuantity, '|', RecId_InventTrans)"/>
  
  <xsl:key name="group" match="ItemDeliveryInformation" use="concat(LineNumDeliveryNote, PackingSlipId, DeliveryDate)"/>

  <!-- Identity-Template für die nicht explizit benannten Elemente -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
 
  <xsl:template match="ItemDeliveryInformation[generate-id() != generate-id(key('packing_slip', concat(LineNumDeliveryNote, '|', PackingSlipId, '|', DeliveryDate, '|', DeliveredQuantity, '|', RecId_InventTrans))[1])]" />
  
   <xsl:template match="ItemDeliveryInformation">
    <xsl:for-each select="current()[generate-id() = generate-id(key('group', concat(LineNumDeliveryNote, PackingSlipId, DeliveryDate))[1])]">
      <ItemDeliveryInformation>
        <xsl:copy-of select="LineNumDeliveryNote"/>
        <xsl:copy-of select="PackingSlipId"/>
        <xsl:copy-of select="DeliveryDate"/>
        <DeliveredQuantity>
          <xsl:value-of select="format-number(sum(key('group', concat(LineNumDeliveryNote, PackingSlipId, DeliveryDate))/DeliveredQuantity), '#.00')"/>
        </DeliveredQuantity>
      </ItemDeliveryInformation>
    </xsl:for-each>
  </xsl:template>
  
<!-- delete empty nodes -->
 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

<xsl:template match="ItemDeliveryInformation/RecId_InventTrans"/>

 <xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/>

</xsl:stylesheet>

Ergebnis sollte sein: -> DeliveredQuantity mit Menge 36

<?xml version="1.0" encoding="UTF-8"?>
<SALESINVOICE>
   <Interchange>
      <Interchange_Control_Number>5637372751</Interchange_Control_Number>
   </Interchange>
   <HeaderInformation>
      <OrigInvoiceNumber>1</OrigInvoiceNumber>
   </HeaderInformation>
   <LineInformation>
      <Item>
         <LineNum>10</LineNum>
         <GTIN>1234</GTIN>
         <ItemDeliveryInformation>
            <LineNumDeliveryNote>10</LineNumDeliveryNote>
            <PackingSlipId>LS-0000224</PackingSlipId>
            <DeliveryDate>2021-02-01</DeliveryDate>
            <DeliveredQuantity>36.00</DeliveredQuantity>
         </ItemDeliveryInformation>
      </Item>
   </LineInformation>
</SALESINVOICE>

Derzeit jedoch: -> Falsche Menge DeliveredQuantity 144

<?xml version="1.0" encoding="UTF-8"?>
<SALESINVOICE>
   <Interchange>
      <Interchange_Control_Number>5637372751</Interchange_Control_Number>
   </Interchange>
   <HeaderInformation>
      <OrigInvoiceNumber>1</OrigInvoiceNumber>
   </HeaderInformation>
   <LineInformation>
      <Item>
         <LineNum>10</LineNum>
         <GTIN>1234</GTIN>
         <ItemDeliveryInformation>
            <LineNumDeliveryNote>10</LineNumDeliveryNote>
            <PackingSlipId>LS-0000224</PackingSlipId>
            <DeliveryDate>2021-02-01</DeliveryDate>
            <DeliveredQuantity>144.00</DeliveredQuantity>
         </ItemDeliveryInformation>
      </Item>
   </LineInformation>
</SALESINVOICE>

Danke & LG Julian

akzeptierte Antworten