| 
 
Subject: RE: [xsl] How to navigate the tree from a selected node to the root? From: Nirmala R <nirmala.r@xxxxxxxxxx> Date: Sat, 19 Oct 2002 17:01:27 +0530  | 
Hi,
Thank you very much for the answer.
That answers my question. Thank you very much.
I need a little enhancement.
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="try.xsl"?>
<books>
<book name="name2">
	<otherdetails price="10"/>
	<otherdetails price="25"/> <!-- Newly added -->
</book>
<book name="name1">
	<otherdetails price="20"/>
	<otherdetails price="35"/> <!-- Newly added -->
</book>
</books>
Now applying the stylesheet as you have mentioned, I get the output as
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="try.xsl"?>
<books>
  <book name="name2">
        <otherdetails price="10"/>
        <otherdetails price="25"/>
</book>
</books>
My requirement is that I want to get
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="try.xsl"?>
<books>
  <book name="name2">
        <otherdetails price="10"/>
</book>
</books>
The sibling of otherdetails also should not be selected.
Hence I tried the stylesheet like
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" indent="yes"/>
<xsl:template match="books">
    <xsl:copy>
      <xsl:apply-templates select="@* | book[otherdetails/@price = '10']" />
    </xsl:copy>
  </xsl:template>
  <xsl:template match="@*|node()">
	<xsl:if test="node()/otherdetails/@price='10'">   <!-- I know, this is not
correct, but i need something like this -->
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
	</xsl:if>
  </xsl:template>
</xsl:stylesheet>
Basically, I should be able to differentiate within the template
match="@*|node(), whether
it is an attribute or a book node. If it is a book node and if
otherdetails/@price is not 10,
then that should not be included in the output xml.
Can you please tell me how could I do that?
Thanks in advance,
Best Regards,
Nirmala
-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of
Jarno.Elovirta@xxxxxxxxx
Sent: Friday, October 18, 2002 5:28 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: [xsl] How to navigate the tree from a selected node to the
root?
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
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| RE: [xsl] How to navigate the tree , Jarno . Elovirta | Thread | FW: [xsl] How to navigate the tree , Nirmala R | 
| RE: [xsl] adding attributes to an e, Nirmala R | Date | [xsl] named template that returns x, Eike Jordan | 
| Month |