Subject: RE: Using XSLT's key() function while context in secondary document?
From: "Scott Trenda" <Scott.Trenda@xxxxxxxx>
Date: Tue, 19 Feb 2008 11:13:04 -0600
|
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@xxxxxxxxxxxxx]
Sent: Tuesday, February 19, 2008 5:48 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: 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
|