xsl-list
[Top] [All Lists]

Re: [xsl] for-each-group

2018-03-28 11:27:48
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(_at_)rickquatro(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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(_at_)saxonica(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 
Sent: Wednesday, March 28, 2018 12:06 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_at_)rickquatro(_dot_)com 
<mailto:rick(_at_)rickquatro(_dot_)com> 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com 
<mailto:xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>> 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(_at_)frameexpert(_dot_)com <mailto:rick(_at_)frameexpert(_dot_)com>
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 <>)
--~----------------------------------------------------------------
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
--~--
<Prev in Thread] Current Thread [Next in Thread>