[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: figuring out what grandparent(?) is

Subject: Re: figuring out what grandparent(?) is
From: "Joerg Heinicke" <joerg.heinicke@xxxxxx>
Date: Fri, 29 Mar 2002 14:34:08 +0100
grandparent name
Hi Eric,

here the normal template:

<xsl:template match="link">

So the context node is <link>. Then there are two ways to test on the
grandparent. Either with name() or with a specific axes and test whether the
nodeset is empty or not.

1. name()

<xsl:if test="name() = 'link' ">the name of the current node is

name() without parameter returns the name of the context node. name() with
parameter returns the name of the first node in this nodeset. So name(//*)
returns the name of the first element in the whole document, which should be
the root element. For your example you need to select the grandparent from
the current node. The easiest thing is '../..' (two steps up). So
name(../..) should give you 'article' or 'smallbox' and you can test on it.

2. axes/nodeset

The other way is using axes. You can find a list of them here:
http://www.zvon.org/xxl/XSLTreference/Output/index.html. For your problem
parent and ancestor(-or-self) are the important ones. You can use the axes
with name() too: name(parent::*/parent::*) is the same as name(../..). But I
want to show you another way testing on the nodeset directly. You must
specify the name exactly instead of using parent::*:

<xsl:if test="parent::p/parent::article">the grandparent is named

The XPATH expression parent::p/parent::article returns a nodeset with all
nodes, (which are grandparent of the current node and which are named
article and (which have a child p, which is the parent of the current
node) ). It's a bit difficult to write it from the eyes of 'link'. The
grandparent can be only one node and so the returned nodeset can only
contain one node or no node. This is converted to boolean false or true and
so you can use it for your test.

Hope this helps,


> Simplified, part of my XML looks like this:
> <article>
>   <p>
>     <link/>
>   </p>
>   <smallbox>
>     <p>
>       <link/>
>     </p>
>   </smallbox>
> <article>
> When processing the <link> template, I need to know whether I'm inside of
> the <smallbox> or just in the <article>; that is, I need something like:
> <xsl:choose>
>   <xsl:when [descendant of smallbox]>
>     do this
>   </xsl:when>
>   <xsl:otherwise>...
> Explanations on the beginner level please!  Thanks much! Eric  : )
> ________________________________________________________________
> Juno offers FREE or PREMIUM Internet access for less!
> Join Juno today!  For your FREE software, visit:
> http://dl.www.juno.com/get/web/.
>  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


Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
First Name
Last Name
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.