Subject: RE: Grouping problem
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 1 Aug 2005 09:56:45 +0100
|
When comparing two node-sets,
X = Y
means "some $x in X equals some $y in Y"
But when you do
name(X) = name(Y)
you are comparing two strings, not two node-sets. If X is a node-set, then
name(X) is the name of the first node in X, and name(Y) is the name of the
first node in Y. (In XSLT 2.0, with version="2.0", you would get an error
trying to apply name() to a node-set containing more than one node. The
change has been made to catch this common mistake.)
In 2.0 you can write
select="*[not(name() = preceding-sibling::*/name())]"
but of course it would be more efficient to use xsl:for-each-group.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
> Sent: 01 August 2005 07:57
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Grouping problem
>
> I have the following XML file -
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
> <a>1</a>
> <b>2</b>
> <d>3</d>
> <d>4</d>
> <b>5</b>
> <b>6</b>
> <c>7</c>
> <c>8</c>
> <a>9</a>
> </root>
>
> I am trying to do grouping operation with the following XSL -
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:output method="xml" version="1.0" encoding="UTF-8"
> indent="yes"/>
>
> <xsl:template match="/root">
> <groups>
> <xsl:for-each select="*[not(name() =
> name(preceding-sibling::*))]">
> <group name="{name()}" />
> </xsl:for-each>
> </groups>
> </xsl:template>
>
> </xsl:stylesheet>
>
> I am expecting output -
> <groups>
> <group name="a" />
> <group name="b" />
> <group name="c" />
> <group name="d" />
> </groups>
>
> But I get output -
> <?xml version="1.0" encoding="UTF-8"?>
> <groups>
> <group name="a"/>
> <group name="b"/>
> <group name="d"/>
> <group name="d"/>
> <group name="b"/>
> <group name="b"/>
> <group name="c"/>
> <group name="c"/>
> </groups>
>
> Where is the problem?
>
> This is tested with Xalan-J 2.6.0 and Saxon 8.4
>
> Regards,
> Mukul
|