Re: [xsl] another placement of nodes question

Subject: Re: [xsl] another placement of nodes question
From: a kusa <akusa8@xxxxxxxxx>
Date: Mon, 25 Jan 2010 12:08:49 -0600
Hi Martin:

Thank you for your input.The issue I am having here is when I use
level2/item[last()], the processor considers both item elements under
<level2> as last ones. So I still get repeated <spec> elements under
both item elements.
How do I get the position of <item> relative to its preceding and
following <item> siblings?

On 1/25/10, Martin Honnen <Martin.Honnen@xxxxxx> wrote:
> a kusa wrote:
>
> > Source XML:
> >
> > <root>
> > <level1>
> > <st1>
> > <desc><text>sample desc</text></desc>
> > <!-- A <spec> element can occur here as well-->
> > <level2>
> > <item><text>r1 </text></item>
> > <item><text>r2</text></item>
> > </level2>
> > <spec><para>Some spec 1</para></spec>
> > <spec><para>Some spec 2</para></spec>
> > </st1>
> > </level1>
> > </root>
> >
> > Here is my desired output XML:
> >
> > <root>
> >
> > <step1>
> > <text>sample desc</text>
> >
> > <step2>
> > <text>r1</text>
> > </step2>
> >
> > <step2>
> > <text>r2</text>
> > <spec><para>Some spec 1</para></spec>
> > <spec><para>Some spec 2</para></spec>
> >
> > </step2>
> >
> > </step1>
> > </root>
> >
> > Please note that every item under level2 becomes a step2 in my output XML.
> >
>
> The following stylesheet creates the output you describe from the input you
> posted:
>
> <xsl:stylesheet
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>  version="1.0">
>
>  <xsl:output indent="yes"/>
>  <xsl:strip-space elements="*"/>
>
>  <xsl:template match="@* | node()">
>    <xsl:copy>
>      <xsl:apply-templates select="@* | node()"/>
>    </xsl:copy>
>  </xsl:template>
>
>  <xsl:template match="st1/desc | st1/level2">
>    <xsl:apply-templates/>
>  </xsl:template>
>
>  <xsl:template match="level1">
>    <step1>
>      <xsl:apply-templates select="st1/*"/>
>    </step1>
>  </xsl:template>
>
>  <xsl:template match="level2/item">
>    <step2>
>      <xsl:apply-templates/>
>    </step2>
>  </xsl:template>
>
>  <xsl:template match="level2/item[last()]" priority="3">
>    <step2>
>      <xsl:apply-templates/>
>      <xsl:copy-of select="../following-sibling::spec"/>
>    </step2>
>  </xsl:template>
>
>  <xsl:template match="st1/spec"/>
>
> </xsl:stylesheet>
>
> --
>
>        Martin Honnen
>        http://msmvps.com/blogs/martin_honnen/

Current Thread