Search code examples
xmlxsltxslt-2.0

Not getting right output from XSLT


I wrote XSLT from given XML but not getting expected output.

<?xml version="1.0" encoding="UTF-8"?>
<EPCISBody>
   <EventList>
      <ObjectEvent>
         <eventTime>2024-03-11T19:57:45.53Z</eventTime>
         <eventTimeZoneOffset>-08:00</eventTimeZoneOffset>
         <baseExtension>
            <eventID>B88F9ACC0DD7F58E</eventID>
         </baseExtension>
         <epcList>
            <epc>438941790942</epc>
            <epc>354159881283</epc>
            <epc>571494019238</epc>
            <epc>600301574096</epc>
            <epc>738033794266</epc>
            <epc>497811017409</epc>
         </epcList>
         <action>ADD</action>
         <bizStep>urn:epcglobal:cbv:bizstep:commissioning</bizStep>
         <disposition>urn:epcglobal:cbv:disp:active</disposition>
         <extension>
            <ilmd>
               <lotNumber>LOT_STM95</lotNumber>
               <itemExpirationDate>2026-02-14</itemExpirationDate>
            </ilmd>
         </extension>
      </ObjectEvent>
      <ObjectEvent>
         <eventTime>2024-03-11T19:57:45.53Z</eventTime>
         <eventTimeZoneOffset>-08:00</eventTimeZoneOffset>
         <baseExtension>
            <eventID>B88F9ACC0DD8158E</eventID>
         </baseExtension>
         <epcList>
            <epc>urn:epc:id:sscc:0361958.1000010007</epc>
            <epc>urn:epc:id:sscc:0361958.1000010008</epc>
         </epcList>
         <action>ADD</action>
         <bizStep>urn:epcglobal:cbv:bizstep:commissioning</bizStep>
         <disposition>urn:epcglobal:cbv:disp:active</disposition>
         <extension>
            <ilmd>
               <lotNumber>LOT_STM95</lotNumber>
               <itemExpirationDate>2026-02-14</itemExpirationDate>
            </ilmd>
         </extension>
      </ObjectEvent>
      <ObjectEvent>
         <eventTime>2024-03-11T19:57:45.53Z</eventTime>
         <eventTimeZoneOffset>-08:00</eventTimeZoneOffset>
         <baseExtension>
            <eventID>B88F9ACC0DD8358E</eventID>
         </baseExtension>
         <epcList>
            <epc>urn:epc:id:sscc:0361958.0001052872</epc>
         </epcList>
         <action>ADD</action>
         <bizStep>urn:epcglobal:cbv:bizstep:commissioning</bizStep>
         <disposition>urn:epcglobal:cbv:disp:active</disposition>
      </ObjectEvent>
      <AggregationEvent>
         <eventTime>2024-03-12T14:28:45Z</eventTime>
         <eventTimeZoneOffset>+00:00</eventTimeZoneOffset>
         <baseExtension>
            <eventID>B88F9ACC0DD8558E</eventID>
         </baseExtension>
         <parentID>urn:epc:id:sscc:0361958.1000010007</parentID>
         <childEPCs>
            <epc>354159881283</epc>
            <epc>438941790942</epc>
            <epc>571494019238</epc>
         </childEPCs>
         <action>ADD</action>
         <bizStep>urn:epcglobal:cbv:bizstep:packing</bizStep>
         <disposition>urn:epcglobal:cbv:disp:in_progress</disposition>
      </AggregationEvent>
      <AggregationEvent>
         <eventTime>2024-03-12T14:28:45Z</eventTime>
         <eventTimeZoneOffset>+00:00</eventTimeZoneOffset>
         <baseExtension>
            <eventID>B88F9ACC0DD8758E</eventID>
         </baseExtension>
         <parentID>urn:epc:id:sscc:0361958.1000010008</parentID>
         <childEPCs>
            <epc>497811017409</epc>
            <epc>600301574096</epc>
            <epc>738033794266</epc>
         </childEPCs>
         <action>ADD</action>
         <bizStep>urn:epcglobal:cbv:bizstep:packing</bizStep>
         <disposition>urn:epcglobal:cbv:disp:in_progress</disposition>
      </AggregationEvent>
      <AggregationEvent>
         <eventTime>2024-03-12T14:28:46Z</eventTime>
         <eventTimeZoneOffset>+00:00</eventTimeZoneOffset>
         <baseExtension>
            <eventID>B88F9ACC0DD8958E</eventID>
         </baseExtension>
         <parentID>urn:epc:id:sscc:0361958.0001052872</parentID>
         <childEPCs>
            <epc>urn:epc:id:sscc:0361958.1000010007</epc>
            <epc>urn:epc:id:sscc:0361958.1000010008</epc>
         </childEPCs>
         <action>ADD</action>
         <bizStep>urn:epcglobal:cbv:bizstep:packing</bizStep>
         <disposition>urn:epcglobal:cbv:disp:in_progress</disposition>
      </AggregationEvent>
      <ObjectEvent>
         <eventTime>2024-03-12T14:28:47Z</eventTime>
         <eventTimeZoneOffset>+00:00</eventTimeZoneOffset>
         <baseExtension>
            <eventID>B88F9ACC0DD8B58E</eventID>
         </baseExtension>
         <epcList>
            <epc>urn:epc:id:sscc:0361958.0001052872</epc>
            <epc>urn:epc:id:sscc:0361958.0001052873</epc>
         </epcList>
         <action>OBSERVE</action>
         <bizStep>urn:epcglobal:cbv:bizstep:shipping</bizStep>
         <disposition>urn:epcglobal:cbv:disp:in_transit</disposition>
      </ObjectEvent>
   </EventList>
</EPCISBody>

Actual--

<?xml version="1.0" encoding="UTF-8"?>
<despatchAdvice>
   <despatchAdviceLogisticUnitLineItem>
      <logisticUnitIdentification>
         <serialShipmentContainerCode>
<serialShippingContainerCode>urn:epc:id:sscc:0361958.0001052872</serialShippingContainerCode>
         </serialShipmentContainerCode>
      </logisticUnitIdentification>
      <levelId>
         <levelIdentification>urn:epc:id:sscc:0361958.0001052872</levelIdentification>
      </levelId>
   </despatchAdviceLogisticUnitLineItem>
</despatchAdvice>

Expected--

<despatchAdvice>
  <despatchAdviceLogisticUnitLineItem>
 <logisticUnitIdentification>
<serialShipmentContainerCode>
  <serialShippingContainerCode>urn:epc:id:sscc:0361958.0001052872</serialShippingContainerCode>
</serialShipmentContainerCode>
 </logisticUnitIdentification>
 <levelId>
<levelIdentification>urn:epc:id:sscc:0361958.0001052872</levelIdentification>
 </levelId>
  </despatchAdviceLogisticUnitLineItem>
  <despatchAdviceLogisticUnitLineItem>
 <logisticUnitIdentification>
<serialShipmentContainerCode>
  <serialShippingContainerCode>urn:epc:id:sscc:0361958.0001052873</serialShippingContainerCode>
</serialShipmentContainerCode>
 </logisticUnitIdentification>
 <levelId>
<levelIdentification>urn:epc:id:sscc:0361958.0001052873</levelIdentification>
 </levelId>
  </despatchAdviceLogisticUnitLineItem>
</despatchAdvice>

Can someone please suggest what is missing here in XSLT code I have written. Please suggest how to achieve right output from XSLT.

XSLT used is below-

<xsl:template match="/">
  <tns:despatchAdvice>
    <xsl:for-each select="/ns0:EPCISDocument/EPCISBody/EventList/ObjectEvent">
      <xsl:if test="contains (bizStep, 'shipping' )">
        <despatchAdviceLogisticUnitLineItem>
          <logisticUnitIdentification>
            <serialShipmentContainerCode>
              <serialShippingContainerCode>
                <xsl:value-of select="epcList/epc"/>
              </serialShippingContainerCode>
            </serialShipmentContainerCode>
          </logisticUnitIdentification>
          <levelId>
            <levelIdentification>
              <xsl:value-of select="epcList/epc"/>
            </levelIdentification>
          </levelId>
        </despatchAdviceLogisticUnitLineItem>
      </xsl:if>
    </xsl:for-each>
  </tns:despatchAdvice>
</xsl:template>

Solution

  • I think you want:

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    
    <xsl:template match="/EPCISBody">
        <despatchAdvice>
            <xsl:for-each select="EventList/ObjectEvent[contains(bizStep, 'shipping')]/epcList/epc">
                <despatchAdviceLogisticUnitLineItem>
                    <logisticUnitIdentification>
                        <serialShipmentContainerCode>
                            <serialShippingContainerCode>
                                <xsl:value-of select="."/>
                            </serialShippingContainerCode>
                        </serialShipmentContainerCode>
                    </logisticUnitIdentification>
                    <levelId>
                        <levelIdentification>
                            <xsl:value-of select="."/>
                        </levelIdentification>
                    </levelId>
                </despatchAdviceLogisticUnitLineItem>
            </xsl:for-each>
        </despatchAdvice>
    </xsl:template>
    
    </xsl:stylesheet>