How to use XSLT to create distinct values in target using XSLT 1.0

Viewed 22

Using a XSLT conversion from SAP IDOC XML to External XML. I need to fill a reference field in the target based on multiple occurrences of source field with only the distinct values separated by "/"

I have managed it with XSLT 3.0 but Azure only support XSLT 1.0. Is there a XSLT 1.0 solution?

source XML

<SHPMNT02>
    <IDOC>
        <EDI_DC40>
        </EDI_DC40>
        <E1EDT20>
            <TKNUM>0200000700</TKNUM>
            <E1EDL20>
                <VBELN>0300166931</VBELN>
            </E1EDL20>
            <E1EDL20>
                <VBELN>0300166930</VBELN>
            </E1EDL20>
            <E1EDL20>
                <VBELN>0300166930</VBELN>
            </E1EDL20>
            
        </E1EDT20>
    </IDOC>
</SHPMNT02>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
    <xsl:template match="/">
        <FRITOM_SHIPMENT_XML>
                      <UNLOADING>
                        <REFERENCE1>
<!--distinct values VBELN, separated by "/" XSLT3.0 solution. "Shame Azure does not support XSLT3.0   -->  
                            <xsl:value-of select="string-join(distinct-values(//SHPMNT02/IDOC/E1EDT20/E1EDL20/VBELN),'/')"/>
                        </REFERENCE1>

                          <REFERENCE2>
<!--distinct values VBELN, separated by "/" XSLT1.0 solution 
How to get distinct values in target element...? -->
                              <xsl:for-each select="SHPMNT02/IDOC/E1EDT20/E1EDL20">
                                  <xsl:value-of select="VBELN"/>
                                  <xsl:if test="position() != last()">
                                      <xsl:text>/</xsl:text>
                                  </xsl:if>
                              </xsl:for-each>
                          </REFERENCE2>
                      </UNLOADING>
        </FRITOM_SHIPMENT_XML>
    </xsl:template>
</xsl:stylesheet>

results:

<?xml version="1.0" encoding="UTF-8"?>
<FRITOM_SHIPMENT_XML>
    <UNLOADING>
        <REFERENCE1>0300166931/0300166930</REFERENCE1>
        <REFERENCE2>0300166931/0300166930/0300166930</REFERENCE2>
    </UNLOADING>
</FRITOM_SHIPMENT_XML>

Question. How to, using XSLT1.0 to create required results (REFFERENCE1)?

Thanks!

0 Answers
Related