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?