Re: [xsl] Need to use document() in key definition

Subject: Re: [xsl] Need to use document() in key definition
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Wed, 4 Dec 2013 17:49:34 +0000
Keys aren't coupled to a specific document. Just use

> <xsl:key name="inMap" match="a" use="@href"/>

Don't worry about the fact that this potentially indexes every document on the
a/@href values. The index will only be built if it is actually used.

Michael Kay
Saxonica

On 4 Dec 2013, at 17:33, dvint@xxxxxxxxx wrote:

> I'm trying to build a look up table by using keys but I have 2 documents
> that I'm working with. The primary document that the stylesheet is
> processing has the values that I want to verify are in the second
> document. This second document is passed in as a parameter to the
> stylesheet. So I was trying to do this:
>
> <xsl:stylesheet version='1.0'
> xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
> <xsl:param name="map-path"/>
> <xsl:key name="inMap" match="document($map-path)//a" use="@href"/>
>
> But I get an error saying that document() is not allowed at the head of a
> pattern.
>
> So, I thought I can get rid of the document() function by using a variable:
>
> <xsl:variable name="map-doc" select="document($map-path)"/>
> <xsl:key name="inMap" match="$map-doc//a" use="@href"/>
>
> this comes back with "variable reference is not allowed in xslt pattern".
>
> I also tried processing this second document with a template of its own,
> so I could use the <xsl:key> element without passing the document
> information in. That fails because <xsl:key> is a top level element and
> can't be used in a template.
>
> I can't change the selection of which document to process, is there an
> option here that I missed?

Current Thread