AW: [xsl] xsl:key function help

Subject: AW: [xsl] xsl:key function help
From: "David Preuss" <d.preuss@xxxxxxxxxxx>
Date: Thu, 4 Aug 2005 08:22:25 +0200
Hello again,

thanks for your help. Finally I dont understand the basic concept I think. 

> Try count(key('Categories','Microsoft'))
> 
> The second argument of key() is an expression that evaluates 
> to the key value you are searching for. The expression you 
> have supplied is Topic, which means child::Topic, and as the 
> context node is "/" and "/" doesn't have a child Topic, you 
> have supplied an empty node-set as the key value, so nothing matches.

That is OK so far because I can understand. Regarding the Muenchian method
which is described on Jenis site I tried the following:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:key name="Categories" match="Tip" use="@Topic" />
<xsl:output method="xml"/>
	
	<xsl:template match="/">		
		<xsl:apply-templates select="Tip[generate-id(.) =
generate-id(key('Categories',@Topic)[1])]"/>
	</xsl:template>

	<xsl:template match="Tip" >
		<xsl:for-each select="key('Categories', @Topic)">
			<xsl:value-of select="@Subtopic"/>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>

That does not work and I dont know why. As you stated earlier I have to
provide a matching child. What is it? A string or a nodeset or an object?
When trying to understand Jenis explanations (My capabilities either in
english and in xslt are very poor) I really had problems to understand the
generate-id approach and also the use of the attributes.

key('Categories',@Topic)[1]
sounds for me like: 

give me the first node in the nodeset which was returned by the key function

But in my case that seem not to match anything. When I just replace teh
xpath on root level with xsl:apply-templates then the Tip template matches
even with the @Topic given as parameter to the key function.

Shed some light on my weird understanding please all you gurus.

Thanks,

David Preuss

Current Thread