Re: [xsl] for-each-group

Subject: Re: [xsl] for-each-group
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 Mar 2018 16:27:44 -0000
Perhaps then it's

group-adjacent="if (self::figure) then generate-id() else '#'"

Michael Kay
Saxonica

> On 28 Mar 2018, at 17:22, Rick Quatro rick@xxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> OK, I think I get it. You are grouping on a string derived from the node
name instead of the node itself. This doesn't work for my general intent,
because the other elements may not all be the same. For example, I might have
this:
>
> <steps>
>   <step>
>     <para>Intro stuff</para>
>     <para>More intro stuff</para>
>     <figure/>
>     <figure/>
>     <para>Conclusion stuff</para>
>     <table>More conclusion stuff</table>
>     <para>More conclusion stuff</para>
>   </step>
> </steps>
>
> and I would want the three elements following the last figure to be in a
single group. But now that I see what you are doing, I will try to work it
out. Thanks.
>
> Rick
>
> From: Michael Kay mike@xxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
> Sent: Wednesday, March 28, 2018 12:06 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] for-each-group
>
> Try group-adjacent="concat(local-name(), if (self::figure) then position()
else 0))"
>
> which will work for your example though it may not match your general
intent...
>
> Michael Kay
> Saxonica
>
>
>
> On 28 Mar 2018, at 16:53, Rick Quatro rick@xxxxxxxxxxxxxx
<mailto:rick@xxxxxxxxxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote:
>
> Hi All,
>
> 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.
>
> Here is my stylesheet:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform
<http://www.w3.org/1999/XSL/Transform>"
>     xmlns:xs="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema>"
>     exclude-result-prefixes="xs"
>     version="2.0">
>
>     <xsl:template match="/steps">
>         <xsl:apply-templates select="step"/>
>     </xsl:template>
>
>     <xsl:template match="step">
>         <xsl:for-each-group select="*" group-starting-with="figure">
>             <xsl:message select="count(current-group())"></xsl:message>
>         </xsl:for-each-group>
>     </xsl:template>
>
> </xsl:stylesheet>
>
> I get the first two groups, but the last two <para> elements are part of the
last <figure>'s group instead of being separate.
>
> I tried using group-by="figure" but I don't get any output. Any help would
be appreciated. Thank you very much.
>
> Rick
>
> Rick Quatro
> Carmen Publishing Inc.
> rick@xxxxxxxxxxxxxxx <mailto:rick@xxxxxxxxxxxxxxx>
> FrameMaker toys: www.frameexpert.com/store
<http://www.frameexpert.com/store>
> 585-366-4017
>
>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <x-msg://66/-list/293509> (by email)
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <x-msg://66/-list/612310> (by email
<applewebdata://483630DE-5E3A-43E4-918E-154D6F872D6A>)
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <-list/293509> (by email <>)

Current Thread