|
Subject: Re: [xsl] Populating keys with values from other documents From: "Ashton, Andrew" <andrew_ashton@xxxxxxxxx> Date: Wed, 30 Jun 2010 09:32:13 -0400 |
On Tue, Jun 29, 2010 at 2:42 PM, David Carlisle <davidc@xxxxxxxxx> wrote:
> the code posted appeared to use @xml:id in both documents rather than @ref
> ???
Yes, sorry, I mistyped that.
> I can do something like this:
>>
>> <xsl:template match="name">
>> <xsl:variable name="uriRef">
>> <xsl:value-of
>> select="(ancestor::*[@xml:id]/@xml:id)[last()]"/>
>> </xsl:variable>
>
> probably better to write that as
>
> <xsl:variable name="uriRef" select="ancestor::*[@xml:id][1]/@xml:id"/.
>
>> <xsl:variable name="person"
>>
>> select="document('file:///people.xml')//person[@xml:id=concat($var,
>> '')]"/>
>
> in xslt2 you can write that as
> <xsl:variable name="person"
> select="key('p',$var,document('file:///people.xml'))"/>
>
> where key is defined by
>
> <xsl:key name="p" match="person" use="@xml:id"/>
>
> If you are using xslt1, you need to wrap the whole of this part of the code
> in
> <sl;for-each select="document('file:///people.xml')">
>
> ...
>
> <xsl:variable name="person"
> select="key('p',$var)"/>
> ...
>
> </xsl:for-each>
This was just what I needed, thank you very much. I am using xslt1
for compatibility.
For comparison, the original method (i.e. making separate document()
calls for each value) took about 35 seconds to render in my webapp.
This method takes about 1 second.
Regards,
Andy
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Populating keys with valu, David Carlisle | Thread | [xsl] debugging document() call, Lars Huttar |
| Re: [xsl] xml fragment to string, David Carlisle | Date | RE: [xsl] Determine position in nod, Houghton,Andrew |
| Month |