Subject: Re: [xsl] Feedback on grouping solution|
From: "Rick Quatro rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sat, 26 Oct 2019 17:45:11 -0000
Hi Martin, That's an oversight on my part. Any elements outside of step elements have to be processed individually. Can I change the for-each-group to just group adjacent <step> elements? Thank you very much. Rick -----Original Message----- From: Martin Honnen martin.honnen@xxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Sent: Saturday, October 26, 2019 1:39 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Feedback on grouping solution On 26.10.2019 19:03, Rick Quatro rick@xxxxxxxxxxxxxx wrote: > I need to process the <step> child elements so that the <figure> > elements are always on the "right" (even-numbered position) in the > output. Immediate children of the <procedure> do not factor into the > odd/even sequence. > > The first child of each group of adjacent <step> elements starts a new > odd/even series. To ensure that the each <figure> is in an > even-numbered position, I want to insert a <spacer> element where it is required. > > Here is my stylesheet. My basic question is: is there a better or more > efficient way to do this? I really want to master grouping because it > comes up in a lot of my tasks. Thank you for any input or criticism. > > <?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:output indent="yes"/> > > <xsl:template match="/procedure"> > > <procedure> > > <!-- Group the children of the procedure, keeping > adjacent steps together. --> > > <xsl:for-each-group select="child::*" > group-adjacent="local-name(.)"> > > <xsl:choose> > > <xsl:when > test="current-group()[not(self::step)]"> > > <!-- Single element. --> > > <xsl:apply-templates > select="current-group()"/> I don't understand this part, what is supposed to happen with two (or more) adjacent <note/><note/> or other non step elements? Do you want to drop any but the first of them?