Re: [xsl] How to move sibling 1 to child, sibling 2 to grandchild...

Subject: Re: [xsl] How to move sibling 1 to child, sibling 2 to grandchild...
From: Andrew Welch <andrew.j.welch@xxxxxxxxx>
Date: Mon, 15 Aug 2011 21:03:58 +0100
On 15 August 2011 21:00, Alex Muir <alex.g.muir@xxxxxxxxx> wrote:
> Hi given the following
>
>         <group xml:id="MILHIS_Yes">
>            <name>Yes</name>
>         </group>
>         <group xml:id="MILHIS_Vehicles">
>            <name>Vehicles</name>
>         </group>
>         <group xml:id="MILHIS_Air">
>            <name>Air</name>
>         </group>
>         <group xml:id="MILHIS_Aeroplane">
>            <name>Aeroplane</name>
>         </group>
>         <item xml:id="MILHIS_Attack_Aircraft">
>            <name>Attack Aircraft</name>
>         </item>
>
> I'm trying to convert it to without any success.
>
>    <group xml:id="MILHIS_Yes">
>      <name>Yes</name><group xml:id="MILHIS_Vehicles">
>        <name>Vehicles</name>
>        <group xml:id="MILHIS_Air">
>          <name>Air</name>
>          <group xml:id="MILHIS_Aeroplane">
>            <name>Aeroplane</name>
>            <item xml:id="MILHIS_Attack_Aircraft">
>              <name>Attack Aircraft</name>
>            </item>
>          </group>
>        </group>
>      </group>
>    </group>
>
> How do you do this in xslt assuming you could have any number of
> groups followed by 1 item?

<xsl:template match="/">
  <xsl:apply-templates select="/path/to/group[1]"/>
</

then within the group template, apply-templates to the next sibling, or item:

<xsl:template match="group">
  <xsl:copy>
    <xsl:copy-of select="node()"/>
    <xsl:apply-templates select="following-sibling::*[1][self::group
or self:item]"/>
  </
</



--
Andrew Welch
http://andrewjwelch.com

Current Thread