[xsl] Re: : Sibling in the Pattern(match)

Subject: [xsl] Re: : Sibling in the Pattern(match)
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Wed, 26 Nov 2003 07:39:23 +0100
I wrote (forgetting for a moment that we were speaking about a match
pattern, which does not allow the preceding-sibling axis) :
>
> To match the preceding siblings of a Member element with name="acc11",
which
> is a child of a Member with name='acc1' use:
>
>     Member[@name = 'acc1']/Member[@name='acc11']/preceding-sibling::Member

Within a match pattern one would write:

     Member[@name = 'acc1']/Member[following-sibling::Member[@name='acc11']]


So, this transformation:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

 <xsl:output omit-xml-declaration="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match=
  "Member[@name = 'acc1']
           /
            Member[following-sibling::Member[@name='acc11']]"/>

</xsl:stylesheet>

when applied on this source.xml:

<D>
   <Member comment="" name="acc1">
     <Calc>+</Calc>
     <Member comment="" name="acc101">
       <Calc>+</Calc>
     </Member>
     <Member comment="" name="acc1021">
       <Calc>+</Calc>
     </Member>
     <Member comment="" name="acc11">
       <Calc>+</Calc>
       <Member name="account3_1"/>
     </Member>
     <Member comment="" name="acc12">
       <Calc>+</Calc>
       <Member name="acc121"/>
     </Member>
   </Member>
   <Member comment="" name="acc2">
     <Calc>+</Calc>
   </Member>
   <Member comment="" name="acc3">
     <Calc>+</Calc>
     <Member comment="" name="acc31">
       <Calc>+</Calc>
     </Member>
     <Member comment="" name="acc11">
       <Calc>+</Calc>
     </Member>
   </Member>
</D>

produces the wanted result, in which all preceding siblings of the "Member"
with name="acc11" (which is a child of the Member with name="acc1") are
removed :


<D>
   <Member comment="" name="acc1">
     <Calc>+</Calc>


     <Member comment="" name="acc11">
       <Calc>+</Calc>
       <Member name="account3_1"/>
     </Member>
     <Member comment="" name="acc12">
       <Calc>+</Calc>
       <Member name="acc121"/>
     </Member>
   </Member>
   <Member comment="" name="acc2">
     <Calc>+</Calc>
   </Member>
   <Member comment="" name="acc3">
     <Calc>+</Calc>
     <Member comment="" name="acc31">
       <Calc>+</Calc>
     </Member>
     <Member comment="" name="acc11">
       <Calc>+</Calc>
     </Member>
   </Member>
</D>


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL






 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread