Subject: RE: Xpath - count preceding-siblings matching some condition
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 30 Apr 2007 21:23:05 +0100
|
When you create a sequence of elements using:
<xsl:variable name="v" as="element()+">
<a/>
<a/>
<a/>
</xsl:variable>
then the elements in the resulting sequence are not siblings. They are
parentless, whereas siblings always share a parent. To make them siblings
you need to add a document node, which you can do simply by leaving out the
"as" attribute:
<xsl:variable name="v">
<a/>
<a/>
<a/>
</xsl:variable>
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Angela Williams [mailto:Angela.Williams@xxxxxxxxxxxxxxxxxx]
> Sent: 30 April 2007 21:00
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: Xpath - count preceding-siblings matching
> some condition
>
> This works great in my test stylesheet. However, when I use
> this in my real stylesheet, I end up with 1 group, so all
> rows have a row-nbr=1.
>
> The only difference in my real stylesheet is how I build $tmp-table.
> Instead of selecting from a static node tree, it is built in
> memory with the <xsl:variable name="tmp-table" as="element()+">
> <!-- build the data -->
> </xsl:variable>
>
> I've tried writing out the data instead of putting it in a
> variable, and then using that output as input for the test
> stylesheet and it works!?!
>
> Is there something different about holding the temporary tree
> in memory to process it, as opposed to selecting from a
> static file? When I view the $tmp-table variables in the
> debugger, my node-sets look exactly the same in both real and
> test stylesheets.
>
> I'm going cross-eyed - any suggestions?
>
> Thanks!
> Angela
>
> -----Original Message-----
> From: Angela Williams
> Sent: Monday, April 30, 2007 1:35 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: Xpath - count preceding-siblings matching
> some condition
>
> That's wonderful!
>
> Thanks!
> Angela
>
> -----Original Message-----
> From: Bjorndahl, Brad [mailto:brad.bjorndahl@xxxxxxxxxxxxxxxx]
> Sent: Monday, April 30, 2007 1:19 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: Xpath - count preceding-siblings matching
> some condition
>
> How about:
>
> <table>
> <xsl:for-each-group select="//data/a"
> group-starting-with="a[@col-nbr lt
> preceding-sibling::a[1]/@col-nbr]" >
> <xsl:variable name="row" select="position()" />
> <xsl:for-each select="current-group()" >
> <b col-nbr="{@col-nbr}" row-nbr="{$row}" />
> </xsl:for-each>
> </xsl:for-each-group>
> </table>
>
> Brad.
|