Subject: Re: [xsl] Using position() From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Wed, 7 Nov 2001 18:35:13 +0000 |
Hi Steve, > While looping through an xsl:for-each select, I can do this: <xsl:if > test="./@t_orno = '100000006'"> to compare an the value of the > t_orno attribute to a static string, and I can do this: <xsl:if > test="./@t_orno = //row[1]/@t_orno"> to compare it to the value of > the attribute in row 1...but what I really want to do is to compare > the attribute value to the attribute value immediately preceding it. > I thought this would work: <xsl:if test="./@t_orno = > //row[position()-1]/@t_orno"> but it doesn't. That's precisely what the preceding-sibling:: axis is for. Try the test: @t_orno = preceding-sibling::row[1]/@t_orno The reason that //row[position()-1]/@t_orno doesn't work is that the position() function gives the position of the *context* node, which within that predicate is the position of the row element amongst its siblings. Since it's a numeric predicate, it's the equivalent of using the path //row[position() = position() - 1]/@t_orno. You could store the position() of the current row in a variable and then test against that, but using the preceding-sibling:: axis is likely to be quicker. By the way, there's never any need to put ./ at the beginning of a location path, because location paths are always resolved from the context node (.) anyway. I hope that helps, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Using position(), Steve Kuntz | Thread | Re: [xsl] Using position(), Graham Seaman |
Re: [xsl] Re: lookup-table thoughts, Jeni Tennison | Date | Re: [xsl] Node Text parsing..., David Carlisle |
Month |