Fantastic -- exactly what I was looking for, straightforward and simple. Will
try this out tonight. Thanks!
Michele
-----Original Message-----
From: Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de
[mailto:xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com]
Sent: Tuesday, April 14, 2015 12:39 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Sorting things on two levels
Michele R Combs mrrothen(_at_)syr(_dot_)edu wrote:
Looks like grouping and sorting to me. Do you use XSLT 1.0 or 2.0?
I'll be running the transform using the latest version of Oxygen, so it looks
like either would be fine. From the Oxygen Help file:
With XSLT 2.0 here is an approach:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="html" indent="yes"/>
<xsl:template match="root">
<ul>
<xsl:for-each-group select="indexterm" group-by="primary">
<xsl:sort select="current-grouping-key()"/>
<li>
<xsl:value-of select="current-grouping-key(), if
(not(current-group()/secondary)) then current-group()/@id else ()"
separator=", "/>
<xsl:if test="current-group()/secondary">
<ul>
<xsl:for-each-group select="current-group()"
group-by="secondary">
<xsl:sort select="current-grouping-key()"/>
<li>
<xsl:value-of select="current-grouping-key(),
current-group()/@id" separator=", "/>
</li>
</xsl:for-each-group>
</ul>
</xsl:if>
</li>
</xsl:for-each-group>
</ul>
</xsl:template>
</xsl:stylesheet>
Outputs
<ul>
<li>aardvarks, {ID}</li>
<li>bears
<ul>
<li>breeding, {ID}</li>
<li>feeding, {ID}</li>
<li>hunting, {ID}, {ID}</li>
</ul>
</li>
</ul>
for your sample data.
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--