This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: key definition
- To: xsl-list at lists dot mulberrytech dot com
- Subject: RE: [xsl] key definition
- From: "Steve Renshaw" <renshaw_steve at hotmail dot com>
- Date: Sun, 28 Oct 2001 22:18:27 +0000
- Cc: chris at bayes dot co dot uk
- Reply-To: xsl-list at lists dot mulberrytech dot com
I tried that key definition and it didn't work all the time.
Consider two test cases:
1) select all <item>'s whose data element has @id=1 and text()='alpha'.
expect first and second <item>'s
2) select all <item>'s whose data element has @id=2 and text()='gamma'.
expect first and third <item>'s
Only the first test case works as intended. Enclosed is XML and XSLT.
This is what I expect to see from XSLT:
alpha, gamma
alpha, delta
-------------
alpha, gamma
beta, gamma
What is wrong?
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="GroupingKeyQuestion.xsl"?>
<items>
<item>
<data id="1">alpha</data>
<data id="2">gamma</data>
</item>
<item>
<data id="1">alpha</data>
<data id="2">delta</data>
</item>
<item>
<data id="1">beta</data>
<data id="2">gamma</data>
</item>
</items>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:key name="MyKey" match="/items/item"
use="concat(data/@id,data/text())" />
<xsl:template match="/">
<xsl:for-each select="key('MyKey',concat('1','alpha'))">
<xsl:value-of select="data[@id='1']"/>,
<xsl:value-of select="data[@id='2']"/><br/>
</xsl:for-each>
<hr/>
<xsl:for-each select="key('MyKey',concat('2','gamma'))">
<xsl:value-of select="data[@id='1']"/>,
<xsl:value-of select="data[@id='2']"/><br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list