RE: [xsl] How to navigate the tree from a selected node to the root?

Subject: RE: [xsl] How to navigate the tree from a selected node to the root?
From: Jarno.Elovirta@xxxxxxxxx
Date: Fri, 18 Oct 2002 14:58:07 +0300
Hi,

> <?xml version="1.0"?>
> <?xml-stylesheet type="text/xsl" href="try.xsl"?>
> 
> <books>
> <book name="name2">
> 	<otherdetails price="10"/>
> </book>
> 
> <book name="name1">
> 	<otherdetails price="20"/>
> </book>
> </books>
> 
> and an xsl for the above as:
> 
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 	<xsl:output method="xml"/>
> 
> 	<xsl:template match="/">
> 	<xsl:for-each select="books/book/otherdetails[@price='10']">
> 	<xsl:copy-of select="parent::*"/>
> 	</xsl:for-each>
> 
> 	</xsl:template>
> </xsl:stylesheet>
> 
> This gives the output as:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <book name="name2">
>         <otherdetails price="10"/>
> </book>
> 
> I want to get like this:
> <books>
> <book name="name2">
>         <otherdetails price="10"/>
> </book>
> </books>
> 
> i.e. From this paricular selected node, i want to navigate 
> till the root
> node and get the output.
> I will not know how many more ancestors are there to reach 
> the root node.
> 
> Can you please help me out for doing the same.

Will changing the approach to

  <xsl:template match="books">
    <xsl:copy>
      <xsl:apply-templates select="@* | book[otherdetails/@price = '10']" />
    </xsl:copy>
  </xsl:template>

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

be a suitable solution?

Cheers,

Jarno

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


Current Thread