xsl-list
[Top] [All Lists]

RE: Re: Is it possible to know position of ancestor?

2002-10-17 14:30:48
Here's another way to do it, and this works regardless of the namespace:

         <xsl:for-each select="..">
            <xsl:number/>
         </xsl:for-each>

Here's how it works:

<xsl:for-each> iterates through each of the nodes in the selected
nodeset.  In this case, that nodeset contains only one node, the parent.
<xsl:number> by default returns the sequence number of the current node
within the context of like named nodes at the same level.  

HTH!

Dion
-----Original Message-----
From: James Carlyle [mailto:james(_dot_)carlyle(_at_)takepart(_dot_)com] 
Sent: Thursday, October 17, 2002 1:28 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Re: Is it possible to know position of ancestor?

If you are not using namespaces, this will work

count(parent::*/preceding-sibling::*[name() =
name(current()/parent::*)]) +
1

Kind regards,

James Carlyle


-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of
evgeniy(_dot_)strokin(_at_)rocketrainer(_dot_)com
Sent: 17 October 2002 21:02
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Re: Is it possible to know position of ancestor?


But if you don't know name of element "line"? It should be the same
name
only this you know.

Thanks,
Jenya

James Carlyle writes:

Try

select="count(../preceding-sibing::line + 1)"

Kind regards,

James Carlyle

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of
evgeniy(_dot_)strokin(_at_)rocketrainer(_dot_)com
Sent: 17 October 2002 20:11
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Re: Is it possible to know position of ancestor?


Yes, you are so right (how do you know what I meant if I didn't
know!?!? :)
But here is also the problem:
Let say we have another XML:
<root>
 <some_tag/>
 <line>
   <a/>
   <b/>
 </line>
 <line>
   <a/>
   <b/> - we are here
 </line>
<root>

In your example select="count(../preceding-sibing::* + 1)" we get
3 because
it will count "some_tag" too. But we need to count only "line"
elements.
How we can solve this problem?

Jenya


David Carlisle writes:


We are in tag "b",
note that xslt works on elements (element nodes) not tags,
and importat
distinction.

 We want to find out what is position of our ancestor
in their ancestor.

I think you mean parent rather than ancestor:

 select="count(../preceding-sibing::* + 1)"


David


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


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



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



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


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