Subject: Re: [xsl] for-each-group From: "Eliot Kimber ekimber@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 28 Mar 2018 16:33:49 -0000 |
If you simply want to distinguish figures from everything else then you can make the grouping key the same for all non-figure elements and unique for figures, e.g.: group-adjacent="if (self::figure) then concat(bfigure-b, position()) else bnot-a-figureb))" I constructed the keys to be clear when reflected e.g., in messages for debugging purposes. Cheers, Eliot -- Eliot Kimber http://contrext.com From: "Rick Quatro rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Reply-To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Date: Wednesday, March 28, 2018 at 11:22 AM To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Subject: Re: [xsl] for-each-group 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 <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" xmlns:xs="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 FrameMaker toys: www.frameexpert.com/store 585-366-4017 XSL-List info and archive EasyUnsubscribe (by email) XSL-List info and archive EasyUnsubscribe (by email) XSL-List info and archive EasyUnsubscribe (by email)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] for-each-group, Rick Quatro rick@xxx | Thread | [xsl] [ANN] Balisage Submissions Du, B Tommie Usdin btusd |
Re: [xsl] for-each-group, Rick Quatro rick@xxx | Date | Re: [xsl] FOSI SGML Information!, Liam R. E. Quin liam |
Month |