|
Subject: [xsl] We need to kick someone out of the group From: "Charles O'Connor coconnor@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 11 Jun 2021 12:26:26 -0000 |
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>. But what I get is
<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>
<aff id="3">Duchy of Lambic-Soaked Cheese Rind</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, the third <aff> is getting drawn into the first <contrib-group>. Even
I could figure out that starting from the context node <contrib-group>, the
following-sibling axis would draw in all three <aff> elements. But that's what
grouping is for, so...
<xsl:template match="contrib-group">
<xsl:copy>
<xsl:apply-templates/>
<xsl:for-each-group select="following-sibling::aff"
group-starting-with="contrib-group">
<xsl:for-each select="current-group()">
<xsl:copy >
<xsl:attribute name="id"><xsl:value-of
select="./@id"/></xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:for-each>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="aff"/>
<xsl:template match="aff/label"/>
I've tried different grouping variations, like using @group-adjacent, but I
get the same result. I have a feeling that the problem is in the <xsl:for-each
select="current-group()">, but this template looks a lot like the sample code
on various tutorials.
???
(I've gotten much help from this list, and I really need to take the time to
get further in Ken's Udemy course! The next time I see any of you, I'll owe
you a beer, a homebrew if I'm not flying. I've got a robust porter wet-hopped
from the vines in my back yard and a Flemish sour with black currants.)
Thanks,
Charles
Charles O'Connor l Business Systems Analyst
Pronouns: He/Him
Aries Systems Corporation l www.ariessys.com
50 High Street, Suite 21 l North Andover, MA l 01845 l USA
Main: +1 (978) 975-7570
Cell: +1 (802) 585-5655
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Conditional sort instruct, Fiona Chen anonymous | Thread | Re: [xsl] We need to kick someone o, Martin Honnen martin |
| Re: [xsl] Removing unwanted space, Charles O'Connor coc | Date | Re: [xsl] We need to kick someone o, Martin Honnen martin |
| Month |