Re: [xsl] keys and collections

Subject: Re: [xsl] keys and collections
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Thu, 21 Jun 2012 16:52:24 +0100
A key can only be used to search within a single document. You can, of course, construct the union of the results of searching each individual document using the key, like this:

$allInput/key('linebyfolio',$folio)

I'm not sure what you were trying to do with the /text/* so I've left that out of the equation.

Michael Kay
Saxonica



On 21/06/2012 16:37, Birnbaum, David J wrote:
Dear XSLT List,

Is it possible to use a key with a collection, along the lines of:

<xsl:variable name="allInput" select="collection('file:///path/?select=*.xml')/text/*"/>
<xsl:key name="linebyfolio" match="line" use="@folio"/>

And then, later:

key('linebyfolio',$folio,$allInput)

Using<oXygen/> 13.2 (configured to use Saxon-PE 9.3.0.5), this generates an error to the effect that: "A sequence of more than one item is not allowed as the third argument of key() (<title/>,<line/>, ...)." The children of the<text> elements in the collection are, indeed,<title> and<line> elements. Removing the "/text/*" from the path doesn't help; the error is then: "A sequence of more than one item is not allowed as the third argument of key() (document-node(), document-node(), ...)." I think I understand why this might be an error, but I seem to have a blind spot in figuring out how to work around it.

Thanks,

David
djbpitt@xxxxxxxxx

Current Thread