xsl-list
[Top] [All Lists]

[xsl] Populating keys with values from other documents

2010-06-29 13:32:58
I am trying to look up a value in an XML document (people.xml) based
on a @ref attribute in my primary document (source.xml).  I know that
the @ref values in source.xml will match the @xml:id values in
people.xml.  I can do something like this:

<xsl:template match="name">
        <xsl:variable name="uriRef">
            <xsl:value-of select="(ancestor::*[(_at_)xml:id]/@xml:id)[last()]"/>
        </xsl:variable>
        <xsl:variable name="person"
            
select="document('file:///people.xml')//person[(_at_)xml:id=concat($var,
'')]"/>
        <xsl:if test="$person/residence/country">
        <span about="ont:place#{$uriRef}" property="foaf:based_near" >
            <xsl:value-of select="$person/residence/country"/>
        </span>
        </xsl:if>
</xsl:template>

But this is incredibly slow for large documents.  I have experimented
with using xsl:key, but I haven't had much.  Essentially I would like
to pre-populate the key with the values from people.xml, but I can't
quite figure out how to do that in a way that doesn't get me into a
looping scenario and/or that allows me to pass my $uriRef value to the
template that processes the key.  Can anyone explain a better
approach?

Thanks, Andy

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>