This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: in for-each apply-templates doesnot work
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] in for-each apply-templates doesnot work
- From: "Michael Kay" <mhkay at iclway dot co dot uk>
- Date: Tue, 18 Sep 2001 18:12:48 +0100
- Reply-To: xsl-list at lists dot mulberrytech dot com
> Goal is to select the double datarecords.
> I identify them if attribute1 and attribute2 are equal
This is essentially a grouping problem, where you are only interested in
groups of size 2 or more. As the grouping key is a compound key (it's not
the string-value of a node), take a look at Muenchian grouping, either in
XSLT Programmer's Reference, or at
http://www.jenitennison.com/xslt/grouping.
>
> In XSL I tried to process with "for-each",
> getting the actual position1,
> searching the next matching row,
> getting that position2
>
> <xsl:variable name="pos1">
> <xsl:value-of select="position()"/>
> </xsl:variable>
>
> <xsl:variable name="pos2">
> <xsl:apply-templates
> select="following-sibling::row[@attribute1=$value1]"/>
> <xsl:value-of select="position()"/>
> </xsl:variable>
The two calls on position() above will return the same result, since they
appear in the same template. You haven't shown us what the template rule for
match="row" actually does, but it doesn't make much difference, the above
code is not going to do anything useful.
A more productive approach would be something like
<xsl:variable name="pos2"
select="count(following-sibling::row[...]/preceding-sibling::*)"/>
but I'm not sure what you want to do with the position once you've got it.
> - position results are 2,4,6.. instead of 1,2,3..
That's because you are processing the whitespace text nodes between the
elements, as well as the elements themselves. Get rid of them using
<xsl:strip-space>.
> - the double row found with apply-templates
> is processed too.
You've lost me here. Fix the other problems first.
Mike Kay
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list