This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: questions regarding the use of position()


> there are two questions;
> firstly, is there a way to refer back to the main position when you are
> looking at its child element? e.g.
>
> <xsl:template match="body1">
> the position of main is <xsl:value-of select="position()"/>
> </xsl:template>
> this approach will only give the position of the body1, but is there are
> ways to display the position of main when you are in the body1 template?

No, because position() is context-dependent. I.e. using
<xsl:apply-templates/> in the template matching Main, position() in template
matching body1 returns 2 (because of 1st node <head>). Or even 4, because
of empty text nodes in front of <head> and <body1>. But writing
<xsl:apply-templates select="body1"/> and your position() will return 1.

But you can count the preceding-sibling nodes of your parent:

<xsl:value-of select="count(../preceding-sibling::Main) + 1"/>

> secondly, is there are ways of creating an id for the body1 element? (how
> about the use of xsl:id? not so sure about this)

I don't know of any xsl:id. But there is the way using generate-id():

<xsl:value-of select="generate-id()"/>

You can specify a XPath-expression as argument for generate-id(), no
argument means current node.

Hope this helps,

Joerg


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]