[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: We need to kick someone out of the group
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.
|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|