| Subject: Re: [xsl] Can't get id() and key() to work From: Aaron Optimizer Digulla <digulla@xxxxxxxx> Date: Sun, 8 Sep 2002 19:59:17 +0200 | 
On Sun, Sep 08, 2002 at 06:43:37PM +0200, J.Pietschmann wrote:
> Aaron Optimizer Digulla wrote:
> >What I basically need is:
> >
> >    <xsl:variable name="infodoc" select="document('infodoc.xml')"/>
> >    <xsl:variable name="info" select="$infodoc/id($key)"/>
> >
> >ie. I have an XML document in $infodoc which has IDs and I want to
> >lookup elements in $infodoc.
> 
> The id() and key() functions work on the document which the
> current context  node is from. A standard technique to change
> the document is to use xsl:for-each:
>    <xsl:variable name="infodoc" select="document('infodoc.xml')"/>
>    <xsl:for-each select="$infodoc">
>      <xsl:variable name="info" select="id($key)"/>
>      ... do something with $info ...
>    </xsl:for-each>
> 
> >
> >I tried to use key() and it actually works but I can't use the
> >result:
> >
> >    <xsl:variable name="info-fragment">
> >	<xsl:for-each select="$imginfo">
> >	    <xsl:copy-of select="key('imgInfoKey', $path-key)"/>
> >	</xsl:for-each>
> >    </xsl:variable>
> ...
> >so apparently there is something in $info-fragment but what?
> 
> If you use xsl:variable without select, it will be an RTF (result
> tree fragment). A RTF has always exactly one root node, same like
> every XML document has. This is what causes the count()=1. OTOH,
> the root node never has any attribute, therefore
>  exslt:node-set($info-fragment)/@width
> is empty. You should try exslt:node-set($info-fragment)/*/@width
> or something replacing the * with the element name of one of the
> elements copied into the RTF.
Ahhh.... yes, when I do "exslt:node-set ($info-fragment)/*", then
it suddenly work!
And thanks to your explanation I suddenly understand what is
going on, too!
Thanks a lot!
> I suspect that "key didn't work", i.e. didn't select anything,
> because it tried to look up the key in the original document
> rather than the $infodoc document.
Err no, I had defined it the wrong way (mixed name and match,
used the wrong element in match and two more mistakes). After
finally understanding how it is supposed to work, I could fix
the mistakes and make it work :-)
-- 
==============================================
Sowatec AG,       CH-8330 Pfäffikon (ZH)
Witzbergstr. 7,   http://www.sowatec.com
Tel: +41-(0)1-952 55 55
Fax: +41-(0)1-952 55 66
----------------------------------------------
Aaron "Optimizer" Digulla, digulla@xxxxxxxxxxx
==============================================
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] Can't get id() and key() , J.Pietschmann | Thread | RE: [xsl] Can't get id() and key() , Robert Koberg | 
| Re: [xsl] Need feedback on XSL/XML , Aaron Optimizer Digu | Date | Re: [xsl] Can't get id() and key() , Aaron Optimizer Digu | 
| Month |