Alternatively, you could do the same with a little less code:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="chnam" match="Chnl" use="@ID" />
<xsl:template match="/">
<Urmel>
<xsl:for-each select="key('chnam', document('s.xml')//Channel)">
<p><xsl:value-of select="@ID"/> this works</p>
</xsl:for-each>
</Urmel>
</xsl:template>
</xsl:stylesheet>
Assuming you're not doing any other processing on the s.xml//Channel
nodes, that is. If not, then with the code above, you shouldn't need to
change the context document in the first place.
~ Scott
-----Original Message-----
From: Michael Ludwig [mailto:mlu(_at_)as-guides(_dot_)com]
Sent: Tuesday, February 19, 2008 5:48 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Using XSLT's key() function while context in
secondary document?
Michael Kay schrieb:
Is there a way to direct the key() function back to the
principal document while the context node is located in
another document?
In XSLT 2.0, use the third argument of key() to tell it which document
to search. In 1.0, you need to change context to that document, which
you can do using xsl:for-each.
Michael Kay
Thanks a lot! So the solution involving the documents given in my
original post goes like this:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="principal-doc" select="/"/>
<xsl:key name="chnam" match="Chnl" use="@ID"/>
<xsl:template match="/">
<Urmel>
<xsl:for-each select="document('s.xml')//Channel">
<xsl:variable name="cur" select="."/>
<xsl:for-each select="$principal-doc"><!-- change context -->
<p><xsl:value-of select="key('chnam', $cur)"/> this works</p>
</xsl:for-each>
<p><xsl:value-of select="key('chnam', $cur)"/>this doesn't</p>
</xsl:for-each>
</Urmel>
</xsl:template>
</xsl:stylesheet>
Michael Ludwig
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--