Reputation: 25
I'm stuck witn my XSL Transformation. I have this xml code:
<DatoveOblasti>
<DataDo Kod="E.01.01.16.01"/>
<DataDo Kod="E.01.01.16.02"/>
<DataDo Kod="S.05.01.02.01"/>
<DataDo Kod="E.01.01.17.01"/>
<DataDo Kod="S.05.01.02.03"/>
</DatoveOblasti>
And I need output like:
<find:filingIndicator contextRef="c">E.01.01</find:filingIndicator>
<find:filingIndicator contextRef="c">S.05.01</find:filingIndicator>
I know how to create substring output but I can't find out how to create it distinct. I tried this but it's not working.
<xsl:template match="DataDo">
<find:filingIndicator contextRef="c">
<xsl:variable name="Kod" select="substring(@Kod, 1, string-length(@Kod) - 6)" />
<xsl:for-each select="distinct-values($Kod)"/>
</find:filingIndicator>
</xsl:template>
Upvotes: 1
Views: 278
Reputation: 117073
Consider the following example:
XML
<DatoveOblasti>
<DataDo Kod="E.01.01.16.01"/>
<DataDo Kod="E.01.01.16.02"/>
<DataDo Kod="S.05.01.02.01"/>
<DataDo Kod="E.01.01.17.01"/>
<DataDo Kod="S.05.01.02.03"/>
</DatoveOblasti>
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="DatoveOblasti">
<output>
<xsl:for-each select="distinct-values(DataDo/substring(@Kod, 1, 7))">
<item>
<xsl:value-of select="."/>
</item>
</xsl:for-each>
</output>
</xsl:template>
</xsl:stylesheet>
Result:
<?xml version="1.0" encoding="UTF-8"?>
<output>
<item>E.01.01</item>
<item>S.05.01</item>
</output>
Demo: https://xsltfiddle.liberty-development.net/pNmC4HX
Upvotes: 2