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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] another placement of node, Martin Honnen | Thread | Re: [xsl] another placement of node, Martin Honnen |
Re: [xsl] another placement of node, Martin Honnen | Date | Re: [xsl] another placement of node, Martin Honnen |
Month |