|
Subject: RE: [xsl] Key error: the context item is undefined From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Mon, 12 Dec 2005 19:17:18 -0000 |
I imagine you want to search within the document that contains the $obj
node. In this case you can write
<xsl:value-of select="foo:do.it(key('by.id', $obj/@idref, $obj/root()))"/>
or if you prefer,
<xsl:value-of select="foo:do.it($obj/key('by.id', @idref))"/>
The reason for the error is that key(), with 2 arguments, always searches
the document containing the context node, and if there isn't a context node
then it doesn't know which document to search.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: drkm [mailto:darkman_spam@xxxxxxxx]
> Sent: 12 December 2005 18:45
> To: XSL Mulberry list
> Subject: [xsl] Key error: the context item is undefined
>
> Hi
>
> I have a problem using a key. I have an XPath function
> that can deal with elements that are identifiers for other
> elements. In such a case, the function uses a key to
> retreive the effective element (corresponding to the id).
>
> Saxon-SA 8.6.1 give me the following error message:
>
> Error on line 13 of ~/drafts/key-wo-context.xsl:
> XPDY0002: Cannot select a node here: the context item
> is undefined
>
> While I think I understand mostly what it means, I can't
> find a way to do what I want. Below is a minimal example
> that reproduce the error:
>
> ~/drafts $ cat key-wo-context.xsl
> <xsl:transform
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:foo="..."
> version="2.0">
>
> <xsl:output method="text"/>
>
> <xsl:key name="by.id" match="item" use="id"/>
>
> <xsl:function name="foo:do.it">
> <xsl:param name="obj"/>
> <xsl:choose>
> <xsl:when test="$obj/@idref">
> <xsl:value-of
> select="foo:do.it(key('by.id', $obj/@idref))"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="."/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:function>
>
> <xsl:template match="/">
> <xsl:value-of select="*[1]/*"/>
> </xsl:template>
>
> </xsl:transform>
>
> ~/drafts $ cat key-wo-context.xml
> <root>
> <item id="a">A</item>
> <item id="b">B</item>
> <item idref="b"/>
> <item id="c">C</item>
> <item idref="c"/>
> <item idref="a"/>
> <item id="d">D</item>
> </root>
>
> ~/drafts $ saxon key-wo-context.xml key-wo-context.xsl
> Error on line 13 of ~/drafts/key-wo-context.xsl:
> XPDY0002: Cannot select a node here: the context item
> is undefined
> Failed to compile stylesheet. 1 error detected.
>
> Do you have any idea?
>
> Thanks,
>
> --drkm
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> ______________________________________________________________
> _____________
> Appel audio GRATUIT partout dans le monde avec le nouveau
> Yahoo! Messenger
> Tilichargez cette version sur http://fr.messenger.yahoo.com
| Current Thread |
|---|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Key error: the context item i, drkm | Thread | RE: [xsl] Key error: the context it, drkm |
| RE: [xsl] document() and HTTP heade, Michael Kay | Date | RE: [xsl] key() in match pattern of, Michael Kay |
| Month |