Subject: Re: [xsl] for-each-group From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 28 Mar 2018 16:25:15 -0000 |
The logic is basically: allocate a grouping key which is effectively: * for figure elements, a unique key * for everything else, the local name of the element then put adjacent elements with the same grouping key into the same group. Perhaps it would be clearer to write group-adjacent="if (self::figure) then generate-id() else local-name()" -- the effect would be the same. Michael Kay Saxonica > On 28 Mar 2018, at 17:14, Rick Quatro rick@xxxxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > My general intent is to group on figure elements. All consecutive siblings > that aren't <figure>s (<para> or otherwise) should be in their own group. > > Michael's solution works, but I am having trouble getting my head around the > logic. Thank you Martin and Michael for the quick replies. > > Rick > > > > -----Original Message----- > From: Martin Honnen martin.honnen@xxxxxx > <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> > Sent: Wednesday, March 28, 2018 12:01 PM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] for-each-group > > On 28.03.2018 17:53, Rick Quatro rick@xxxxxxxxxxxxxx wrote: > >> I have a <step> element that looks something like this: >> >> <steps> >> >> <step> >> >> <para>Intro stuff</para> >> >> <para>More intro stuff</para> >> >> <figure/> >> >> <figure/> >> >> <para>Conclusion stuff</para> >> >> <para>More conclusion stuff</para> >> >> </step> >> >> </steps> >> >> I want 4 separate groups: >> >> 1) First two <para> elements. >> >> 2) First <figure> >> >> 3) Second <figure> >> >> 4) Last two <para> elements. > > Can you explain the rules for that result, do you want to group any adjacent > "para" element into one group but keep each "figure" element in its own > group? > > In that case you can use > > <xsl:for-each-group select="*" group-adjacent="boolean(self::para)"> > <xsl:choose> > <xsl:when test="current-grouping-key()"> > <group> > <xsl:apply-templates select="current-group()"/> > </group> > </xsl:when> > <xsl:otherwise> > <xsl:for-each select="current-group()"> > <group> > <xsl:apply-templates select="."/> > </group> > </xsl:for-each> > </xsl:otherwise> > </xsl:choose> > </xsl:for-each-group>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] for-each-group, Rick Quatro rick@xxx | Thread | Re: [xsl] for-each-group, Michael Kay mike@xxx |
Re: [xsl] for-each-group, Rick Quatro rick@xxx | Date | Re: [xsl] for-each-group, Martin Honnen martin |
Month |