Subject: Re: [xsl] Grouping with siblings From: "Graydon graydon@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 15 Feb 2025 20:07:34 -0000 |
On Sat, Feb 15, 2025 at 07:49:50PM -0000, rick@xxxxxxxxxxxxxx scripsit: > I have a flat file structure and am trying to add structure to it. Here is > my XML: [snip] > <xsl:template match="div"> > <book> > <xsl:for-each-group > select="*[starts-with(@sID,'chapter')]|text()" You want everything, not just the chapters, and likely in the context of div, so select="*" ought to do it. > group-starting-with="chapter[@sID]"> > <xsl:if test="self::chapter[@sID]"> > <chapter number="{@n}"> > <title>{@sID}</title> > <xsl:apply-templates select="." mode="group"/> > </chapter> > </xsl:if> > </xsl:for-each-group> Ritual caution: xsl:iterate has the loop nature. xsl:for-each has the "change the context and for each such context, do this; logically, this all happens at the same time" nature. I'm honestly not sure what the context item is inside for-each-group; I am pretty sure you want to be looking at the sequence required by current-group() rather than the context item. <xsl:choose> <xsl:when test="head(current-group()) instance of element(chapter)"> <chapter number="{head(current-group())/@number}"> <title>{head(current-group())/@sID}</title> <xsl:apply-templates select="tail(current-group())" /> </chapter> </xsl:when> <xsl:otherwise> <!-- there could in principle be something ahead of the first group; also, maybe we didn't get the test quite right --> <xsl:apply-templates select="current-group()" /> </xsl:otherwise> </xsl:choose> (I just typed this, so it might have some syntax glitches.) Once this works, you're probably going to want to add a test for "nothing but a chapter in this group" and drop those before you get to the "nest the content" xsl:when. -- Graydon Saunders | graydonish@xxxxxxxxxxxx \xDE\xE6s ofer\xE9ode, \xF0isses sw\xE1 m\xE6g. -- Deor ("That passed, so may this.")
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Grouping with siblings, rick@xxxxxxxxxxxxxx | Thread | Re: [xsl] Grouping with siblings, Martin Honnen martin |
[xsl] Grouping with siblings, rick@xxxxxxxxxxxxxx | Date | Re: [xsl] Grouping with siblings, Martin Honnen martin |
Month |