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 |