XSLT - Get unique Keys and merge data in one step



I have a XML File where I have several Fields for years, Year1, Year2, Year3.



<?xml version="1.0" encoding="utf-16"?>
<data>
<row>
<field fieldno="Name">Hello</field>
<field fieldno="Year1">2014</field>
<field fieldno="Year2">2015</field>
<field fieldno="Year3">2016</field>

</row>
<row>
<field fieldno="Name">NotWelcome</field>
<field fieldno="Year1">2016</field>
<field fieldno="Year2">2017</field>
<field fieldno="Year3">2018</field>
</row>
<row>
<field fieldno="Name">Welcome</field>
<field fieldno="Year1">2014</field>
<field fieldno="Year2">2015</field>
<field fieldno="Year3">2016</field>
</row>
<row>
<field fieldno="Name">Goodbye</field>
<field fieldno="Year1">2015</field>
<field fieldno="Year2">2016</field>
<field fieldno="Year3">2017</field>
</row>
</data>


I want to get all appearing years in the XML file, but only once, so for my file I need:


2014 2015 2016 2017


I read some stuff about muenchian grouping and got the correct result for one field by this transformation:



<xsl:stylesheet version="1.0" xmlns:xsl="http://ift.tt/tCZ8VR">
<xsl:key name="unique-year" match="row" use="field[@fieldno='7015']" />
<xsl:key name="unique-year2" match="row" use="field[@fieldno='7016']" />
<xsl:key name="unique-year3" match="row" use="field[@fieldno='7017']" />

<xsl:template match="data">
<xsl:for-each select="row[count(. | key('unique-year', field[@fieldno='7015'])[1]) = 1]">
<xsl:sort select="field[@fieldno='7015']" />
<xsl:value-of select="field[@fieldno='7015']" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


But I dont really know how to get the single results merged, so I get one overall result.


How can I manage this?


In addition, I do not understand the line, I just adopted it for my requirements but I dont know whats going on here:



<xsl:for-each select="row[count(. | key('unique-year', field[@fieldno='7015'])[1]) = 1]">


Do one of you guys have an explanation for me whats happening here?


Thanks and kind regards,


Alex


Tiada ulasan:

Catat Ulasan