|
Subject: Re: [xsl] We need to kick someone out of the group From: "Mukul Gandhi mukulg@xxxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 15 Jun 2021 04:32:32 -0000 |
On Fri, Jun 11, 2021 at 5:56 PM Charles O'Connor coconnor@xxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> 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>
>
Here's what I tried and which works.
My XML input document,
<temp>
<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>
</temp>
My XSLT 2.0 stylesheet,
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="contrib-group">
<xsl:variable name="c_grp" select="."/>
<xsl:copy>
<xsl:apply-templates/>
<xsl:variable name="affList">
<xsl:apply-templates select="$c_grp/following-sibling::*[1]"
mode="m1"/>
</xsl:variable>
<xsl:for-each select="$affList/*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="node()[not(self::label)]"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template match="aff"/>
<xsl:template match="*" mode="m1">
<xsl:if test="self::aff">
<xsl:copy-of select="."/>
<xsl:apply-templates select="following-sibling::*[1]" mode="m1"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
The output of above XSLT transformation is following,
<?xml version="1.0" encoding="UTF-8"?>
<temp>
<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>
</temp>
--
Regards,
Mukul Gandhi
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] We need to kick someone o, Charles O'Connor coc | Thread | Re: [xsl] We need to kick someone o, Charles O'Connor coc |
| Re: [xsl] We need to kick someone o, Charles O'Connor coc | Date | Re: [xsl] We need to kick someone o, Charles O'Connor coc |
| Month |