Re: [xsl] We need to kick someone out of the group

Subject: Re: [xsl] We need to kick someone out of the group
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 11 Jun 2021 12:35:03 -0000
Am 11.06.2021 um 14:26 schrieb Charles O'Connor coconnor@xxxxxxxxxxxx:
Hi all,

Sometimes I am baffled about how to approach something. Sometimes I'm
baffled by why something doesn't work.

Using XSLT 2.0, I have the input XML:


     <contrib-group>
         <contrib><name>Bob</name><xref rid="aff1"/></contrib>
         <contrib><name>Judy</name><xref rid="aff2"/></contrib>
     </contrib-group>
     <aff id="1"><label>1</label>Kingdom of Curds</aff>
     <aff id="2"><label>2</label>Land of Whey</aff>
     <contrib-group>
         <contrib><name>Jimmy</name><xref rid="aff3"/></contrib>
     </contrib-group>
     <aff id="3"><label>2</label>Duchy of Lambic-Soaked Cheese Rind</aff>

I'm trying to get:

     <contrib-group>
         <contrib><name>Bob</name><xref rid="aff1"/></contrib>
         <contrib><name>Judy</name><xref rid="aff2"/></contrib>
         <aff id="1">Kingdom of Curds</aff>
         <aff id="2">Land of Whey</aff>
     </contrib-group>
     <contrib-group>
         <contrib><name>Jimmy</name><xref rid="aff3"/></contrib>
         <aff id="3">Duchy of Lambic-Soaked Cheese Rind</aff>
     </contrib-group>

That is, move the following <aff> elements into the <contrib-group> and
remove the <label>.




I would use group-starting-with in a template matching the parent or
node e.g.


<xsl:template match="*[contrib-group]"> <xsl:copy> <xsl:for-each-group select="*" group-starting-with="contrib-group"> <xsl:copy> <xsl:apply-templates select="@*, node(), tail(current-group())"/> </xsl:copy> </xsl:for-each-group> </xsl:copy> </xsl:template>


<xsl:template match="aff/label"/>



Assumes the identity template set up. tail(current-group()) is subsequence(current-group(), 2) in XSLT 2.

Current Thread