This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Can't get id() and key() to work


On Sun, Sep 08, 2002 at 10:02:56AM -0700, Robert Koberg wrote:

> Hi,
> 
> Assuming you have the key set up correctly you can simply match the 'image' tag
> from you source XML (example source would help). The source XML's image tag has
> the unique ID. For example:
> 
> <xsl:template match="image">
>   <xsl:for-each select="$infodoc">
>     <xsl:message>info2=<xsl:value-of select="$path-key"/></xsl:message>
>     <xsl:message>info3=<xsl:value-of select="key('imgInfoKey',
> $path-key)/@width"/></xsl:message>
>     <xsl:message>info4=<xsl:value-of select="key('imgInfoKey',
> $path-key)/@height"/></xsl:message>
>   </xsl:for-each>
> </xsl:template>
> 
> I try to avoid extensions. Do you really need them? If you can do without, then
> you need to get into the context of the document you need information from. Then
> use the key to find the nodeset and get the value you want from there. You
> cannot store the value of this nodeset in a variable. You need to use the key
> each time.
> 
> Does this help?

Yes, thank you.

As for not using extensions: I understand that using extensions makes
the stylesheet unportable.

BUT

I generate about 500 page with roughly 40 images in each of them.
I *have* to do the lookups as seldom as possible. That's why
I need to convert the RTF into a node-set and then work on
that.

I have now written an extension function which allows me to conveniently
call

    <xsl:variable name="info" select="my:lookup-image-info ($key)"/>

which is a) very readable, b) fast and c) exactly what I need.

(Portability is not an issue for me; xsltproc is available for all
systems where I need it).

But I hope that XSLT 2 solves these problems. It would really be
nice if one could pass the context into key() and id().

> > Hello,
> >
> > 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.
> >
> > 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>
> >     <xsl:message>info2=<xsl:value-of select="$path-key"/></xsl:message>
> >     <xsl:message>info3a=<xsl:value-of
> > select="exslt:object-type($info-fragment)"/></xsl:message>
> >     <xsl:message>info3b=<xsl:value-of
> > select="count($info-fragment)"/></xsl:message>
> >     <xsl:variable name="info" select="exslt:node-set($info-fragment)"/>
> >     <xsl:message>info4=<xsl:value-of select="$info/@width"/></xsl:message>
> >     <xsl:message>info4b=<xsl:value-of
> > select="exslt:node-set($info-fragment)/@width"/></xsl:message>
> >
> > This gives:
> >
> > info2=images/uy-online-left.jpg
> > info3a=RTF
> > info3b=1
> > info4=
> > info4b=
> >
> > so apparently there is something in $info-fragment but what?
> >
> > --
> > ==============================================
> > 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@sowatec.com
> > ==============================================
> >
> >  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> >
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 

-- 
==============================================
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@sowatec.com
==============================================

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]