Subject: [xsl] Two possible group-ending-with nodes From: "rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 6 Jan 2023 14:42:22 -0000 |
Hi All, I am trying to add some hierarchy to flat content. I have this as an input file: <?xml version="1.0" encoding="UTF-8"?> <root> <p class="CBNote"/> <p class="CBNoteBody"/> <p class="CBBodyIndented" style="margin-left:96px;"/> <p class="CBBodyIndented"/> <p class="CBBody"/> </root> This is my desired output: <?xml version="1.0" encoding="UTF-8"?> <root> <div class="note"> <div class="note-header"> <p class="CBNote"/> </div> <div class="note-content"> <p class="CBNoteBody"/> <p class="CBBodyIndented" style="margin-left:96px;"/> </div> </div> <p class="CBBodyIndented"/> <p class="CBBody"/> </root> After the note-header, the bottom boundary of the note content is either one of these: p[@class='CBNoteBody']|p[@class='CBBodyIndented'][@style='margin-left:96px;' ] 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" 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> <xsl:for-each-group select="tail(current-group())" group-ending-with="p[@class='CBNoteBody']|p[@class='CBBodyIndented'][@style= 'margin-left:96px;']"> <xsl:copy-of select="current-group()[1]"></xsl:copy-of> </xsl:for-each-group> </div> </xsl:when> </xsl:choose> </xsl:for-each-group> </xsl:copy> </xsl:template> <xsl:mode on-no-match="shallow-skip"/> </xsl:stylesheet> Here is my current output: <?xml version="1.0" encoding="UTF-8"?> <root> <div class="note"> <div class="note-header"> <p class="CBNote"/> </div> <p class="CBNoteBody"/> <p class="CBBodyIndented" style="margin-left:96px;"/> <p class="CBBodyIndented"/> </div> </root> It looks like my group-ending-with is giving me 3 groups instead of 2 like I expected. Any pointers will be appreciated. Thank you. Rick
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] [ANN] spaces available in, Liam R. E. Quin liam | Thread | Re: [xsl] Two possible group-ending, Martin Honnen martin |
Re: [xsl] [ANN] spaces available in, Liam R. E. Quin liam | Date | Re: [xsl] Two possible group-ending, Martin Honnen martin |
Month |