Re: [xsl] For-each and keys()

Subject: Re: [xsl] For-each and keys()
From: David Carlisle <davidc@xxxxxxxxx>
Date: Wed, 2 Aug 2006 16:06:45 +0100
> XSL goes something like:
its easier if you post the actual (short) code that you have run in the
xslt processor.

> <xsl:variable name="$Definitions" select="Document(Disabilities.xml)" />
That's a syntax error, document() doesn't have a D and expects a string
document('disabilities.xml') and the variable name does not start with $.

                                       
> <xsl:variable name="$Var" select="Document(Records.xml)" />
same here.


>> <xsl:for-each select="$Definitions">
>>   <xsl:value-of select="count(key('oldID',$current))" />
>> </xsl:for-each>

>I really don't understand this.

key() returns all the nodes that match the key _in the current document_
so if you want to look up keys in a different document then (in xslt1)
you need touse  xsl:for-each  to make that document current.
In XSLT2 you could equivalently go
<xsl:value-of select="$Definitions/count(key('oldID',$current))
or
<xsl:value-of select="count(key('oldID',$current,$Definitions))

> I really don't understand this.  I should mention there are many other
> branches within $Definitions besides /disabilities.

If $Definitions is defined using document() then it will represent a
well formed document so there can be at most one top level element
(presumably <disabilities>) so I do not see what you can mean by "other
branches"

David

Current Thread