Following on from my query regarding XSLT 1.0 - Concatenate known child nodes, group by unknown parent , and in a similar predicament to Group/merge childs of same nodes in xml/xslt when repeating upper nodes , I want to further define my grouping, and transform
<root>
<object>
<entry>
<id>apples</id>
<parent1>
<object_id>1</object_id>
</parent1>
<parent1>
<object_id>2</object_id>
</parent1>
<parent2>
<object_id>3</object_id>
</parent2>
<parent2>
<object_id>4</object_id>
</parent2>
<parent2>
<object_id>5</object_id>
</parent2>
</entry>
</object>
<object>
<entry>
<id>pears</id>
<parent1>
<object_id>5</object_id>
</parent1>
<parent1>
<object_id>4</object_id>
</parent1>
<parent2>
<object_id>3</object_id>
</parent2>
<parent2>
<object_id>2</object_id>
</parent2>
<parent2>
<object_id>1</object_id>
</parent2>
</entry>
</object>
</root>
into
<root>
<object>
<entry>
<id>apples</id>
<parent1>1-2</parent1>
<parent2>3-4-5</parent2>
</entry>
</object>
<object>
<entry>
<id>pears</id>
<parent1>5-4</parent1>
<parent2>3-2-1</parent2>
</entry>
</object>
</root>
I'm trying something like this (although this entire example is simplified):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:key name="groupKey" match="/object/*/*/object_id" use="concat(../../id/text(),name(..))"/>
<xsl:template match="/">
<xsl:apply-templates select="./*[object_id]"/>
</xsl:template>
<xsl:template match="/object/*/*[generate-id(object_id)=generate-id(key('groupName',concat(../id/text(),name()))[1])]">
<field>
<xsl:attribute name="name">
<xsl:value-of select="local-name()" />
</xsl:attribute>
<xsl:for-each select="key('groupName',concat(../id/text(),name()))">
<xsl:if test="not(position()=1)">-</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</field>
</xsl:template>
</xsl:stylesheet>
but my understanding of XPath is lacking, and this is collating ALL the object ids in the first of each parent grouping (ie, concatenated key isn't working).
If someone could help me tidy up my XPath syntax I'd be extremely grateful.
Thanks in advance!