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!