Subject: Re: [xsl] Can't get id() and key() to work From: "J.Pietschmann" <j3322ptm@xxxxxxxx> Date: Sun, 08 Sep 2002 18:43:37 +0200 |
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. 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.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Can't get id() and key() to w, Aaron Optimizer Digu | Thread | Re: [xsl] Can't get id() and key() , Aaron Optimizer Digu |
[xsl] Can't get id() and key() to w, Aaron Optimizer Digu | Date | RE: [xsl] Can't get id() and key() , Robert Koberg |
Month |