Subject: Re: [xsl] Two possible group-ending-with nodes From: "rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 6 Jan 2023 15:47:49 -0000 |
Martin, I see your solution in the previous post and it is cleaner using the note variable. Thank you very much! Rick From: rick@xxxxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Sent: Friday, January 6, 2023 10:40 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Two possible group-ending-with nodes This definitely makes sense. I think it is a group-adjacent problem. Here is my modified input with the correct output: <?xml version="1.0" encoding="UTF-8"?> <root> <p class="CBBodyIndented">Out 1</p> <p class="CBNote">In header</p> <p class="CBNoteBody">In content 1</p> <p class="CBBodyIndented" style="margin-left:96px;">In content 2</p> <p class="CBBodyIndented">Out 2</p> <p class="CBBody">Out 3</p> <p class="CBBodyIndented" style="margin-left:96px;">Out 4</p> </root> <?xml version="1.0" encoding="UTF-8"?> <root> <p class="CBBodyIndented">Out 1</p> <div class="note"> <div class="note-header"> <p class="CBNote">In header</p> </div> <div class="note-content"> <p class="CBNoteBody">In content 1</p> <p class="CBBodyIndented" style="margin-left:96px;">In content 2</p> </div> </div> <p class="CBBodyIndented">Out 2</p> <p class="CBBody">Out 3</p> <p class="CBBodyIndented" style="margin-left:96px;">Out 4</p> </root> Below is my stylesheet. I am using the same for-each-group group-adjacent loop twice because I need some content inside the <div class-"note-content"> and the rest of it outside. Any suggestions for a better approach will be appreciated. Thank you! <?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" xmlns:math="http://www.w3.org/2005/xpath-functions/math" exclude-result-prefixes="xs math" version="3.0" expand-text="yes"> <xsl:output indent="yes"/> <xsl:template match="/root"> <xsl:copy> <xsl:for-each-group select="*" group-starting-with="p[@class='CBNote']"> <xsl:choose> <xsl:when test="self::p[@class='CBNote']"> <div class="note"> <div class="note-header"> <xsl:copy-of select="."/> </div> <div class="note-content"> <xsl:for-each-group select="tail(current-group())" group-adjacent="if(self::p[@class='CBNoteBody']|self::p[@class='CBBodyIndent ed'][@style='margin-left:96px;']) then 1 else 0"> <xsl:if test="current-grouping-key()=1 and position()=1"> <xsl:copy-of select="current-group()"/> </xsl:if> </xsl:for-each-group> </div> </div> </xsl:when> <xsl:otherwise><xsl:apply-templates select="current-group()"/></xsl:otherwise> </xsl:choose> <xsl:for-each-group select="tail(current-group())" group-adjacent="if(self::p[@class='CBNoteBody']|self::p[@class='CBBodyIndent ed'][@style='margin-left:96px;']) then 1 else 0"> <xsl:if test="current-grouping-key()=0 or position()>1"> <xsl:copy-of select="current-group()"/> </xsl:if> </xsl:for-each-group> </xsl:for-each-group> </xsl:copy> </xsl:template> <xsl:mode on-no-match="shallow-copy"/> </xsl:stylesheet> From: Michael Kay michaelkay90@xxxxxxxxx <mailto:michaelkay90@xxxxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> > Sent: Friday, January 6, 2023 10:05 AM To: xsl-list <xsl-list@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list@xxxxxxxxxxxxxxxxxxxxxx> > Subject: Re: [xsl] Two possible group-ending-with nodes It ends the first inner group at the first element because it matches the first condition, p[@class='CBNoteBody']; it ends the second inner group at the second element because it matches the second condition p[@class='CBBodyIndented'][@style='margin-left:96px;'], and it ends the third inner group at the third element because everything after the last matching element goes in a final group regardless. Michael Kay Saxonica XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/612310> (by email) XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/612310> (by email <> )
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Two possible group-ending, rick@xxxxxxxxxxxxxx | Thread | [xsl] [ANN] Saxon 12.0, Michael Kay michaelk |
Re: [xsl] Two possible group-ending, rick@xxxxxxxxxxxxxx | Date | [xsl] [ANN] Saxon 12.0, Michael Kay michaelk |
Month |