I am struggling with a simple task. The following XML file
<Root>
<Row>
<ConceptID>1</ConceptID>
<Concept>may be empty</Concept>
<TermID>2481</TermID>
<Term>screened room</Term>
<Language>EN</Language>
<Usage>forbidden</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>HEKT385057</Source>
</Row>
<Row>
<ConceptID>1</ConceptID>
<Concept>may be empty</Concept>
<TermID>6551</TermID>
<Term>shielded room</Term>
<Language>EN</Language>
<Usage>allowed</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>EKT-TD</Source>
</Row>
<Row>
<ConceptID>1</ConceptID>
<Concept>may be empty</Concept>
<TermID>6552</TermID>
<Term>unverseuchter Raum</Term>
<Language>DE</Language>
<Usage>allowed</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>EKT-40</Source>
</Row>
<Row>
<ConceptID>2</ConceptID>
<Concept>may be also empty</Concept>
<TermID>2482</TermID>
<Term>low-pressure ventilator</Term>
<Language>EN</Language>
<Usage>allowed</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>Birgit</Source>
</Row>
<Row>
<ConceptID>2</ConceptID>
<Concept>may be also empty</Concept>
<TermID>2483</TermID>
<Term>LP ventilator</Term>
<Language>EN</Language>
<Usage>allowed</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>HEKT385057</Source>
</Row>
...
</Root>
I wish to transform into a new XML file with following structure and grouping (ConceptID):
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NewConcept>
<ConceptID>1</ConceptID>
<Concept>may be empty</Concept>
<TermG>
<TermID>6551</TermID>
<Term>shielded room</Term>
<Language>EN</Language>
<Usage>allowed</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>EKT-TD</Source>
</TermG>
<TermG>
<TermID>6552</TermID>
<Term>unverseuchter Raum</Term>
<Language>DE</Language>
<Usage>allowed</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>EKT-40</Source>
</TermG>
<TermG>
<TermID>2481</TermID>
<Term>screened room</Term>
<Language>EN</Language>
<Usage>forbidden</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>HEKT385057</Source>
</TermG>
</NewConcept>
<NewConcept>
<ConceptID>2</ConceptID>
<Concept>may be also empty</Concept>
<TermG>
<TermID>2482</TermID>
<Term>low-pressure ventilator</Term>
<Language>EN</Language>
<Usage>allowed</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>Birgit</Source>
</TermG>
<TermG>
<TermID>2483</TermID>
<Term>LP ventilator</Term>
<Language>EN</Language>
<Usage>allowed</Usage>
<StatusLanguage>new</StatusLanguage>
<Source>HEKT385057</Source>
</TermG>
</NewConcept>
...
</Root>
my current XSL file however only copies the tags into the desired structure but not the content
<xsl:key name="concept" match="Row" use="ConceptID" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="Row[generate-id(.)=generate-id(key('concept',ConceptID)[1])]">
<xsl:sort select="ConceptID" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="Row">
<NewConcept>
<xsl:apply-templates select="ConceptID" />
<xsl:apply-templates select="Concept" />
<xsl:for-each select="key('concept', ConceptID)">
<xsl:sort select="Usage"/>
<TermG>
<xsl:apply-templates select="TermID" />
<xsl:apply-templates select="Term" />
<xsl:apply-templates select="Language" />
<xsl:apply-templates select="Usage" />
<xsl:apply-templates select="StatusLanguage" />
<xsl:apply-templates select="Source" />
</TermG>
</xsl:for-each>
</NewConcept>
</xsl:template>
yields into:
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NewConcept>
<ConceptID/>
<Concept/>
<TermG>
<TermID/>
<Term/>
<Language/>
<Usage/>
<StatusLanguage/>
<Source/>
</TermG>
<TermG>
<TermID/>
<Term/>
<Language/>
<Usage/>
<StatusLanguage/>
<Source/>
</TermG>
<TermG>
<TermID/>
<Term/>
<Language/>
<Usage/>
<StatusLanguage/>
<Source/>
</TermG>
</NewConcept>
...
</Root>
Replacing
<xsl:apply-templates select="Row[generate-id(.)=generate-id(key('concept',ConceptID)[1])]">
<xsl:sort select="ConceptID" data-type="number"/>
</xsl:apply-templates>
with
<xsl:apply-templates select="@*|node()"/>
gives me the correct output (structure and content), however the groups appear multiple times, depending on how man elements are in a group (three elements for example results in three times the same group). I would very much appreciate a hint that helps me to solve this task! Thank you very much.