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

Subject: Re: [xsl] We need to kick someone out of the group
From: "Charles O'Connor coconnor@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 15 Jun 2021 21:27:28 -0000
Thanks Mukul!

I will give that a try.

Best,
Charles

From: Mukul Gandhi mukulg@xxxxxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Tuesday, June 15, 2021 12:33 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] We need to kick someone out of the group

*** External email: use caution ***

On Fri, Jun 11, 2021 at 5:56 PM Charles O'Connor
coconnor@xxxxxxxxxxxx<mailto:coconnor@xxxxxxxxxxxx>
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx<mailto:xsl-list-service@xxxxxxxxxxxx
rytech.com>> 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
XSL-List info and archive<http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe<http://lists.mulberrytech.com/unsub/xsl-list/2963104> (by
email<>)

Current Thread