Subject: [xsl] xsl:key use attribute using string() causes missing all matches except the first one From: Xiaocun Xu <xiaocunxu@xxxxxxxxx> Date: Wed, 24 Mar 2004 08:41:35 -0800 (PST) |
Hi, I recently had an interesting discovery with xsl:key use attribute using string(). I been using string() in xsl:key use attribute extensively since it allows me to retrieve records using the key value "". But in the following example, using string() caused me to miss all matches except the first one. I am not sure what is the reason for this, would appreciate if anyone could shed light on this behavior. Example input XML and XSLT below. thanks, Xiaocun input XML: <range> <row row="16"> <cell column="1">supplier</cell> <cell column="2">s3</cell> <cell column="3">item</cell> <cell column="4"> <subcell>item1</subcell> <subcell>item2</subcell> <subcell>item3</subcell> </cell> <cell column="5">s3_AM1</cell> <cell column="6">accepted</cell> </row> <row row="17"> <cell column="1">supplier</cell> <cell column="2">s4</cell> <cell column="3">item</cell> <cell column="4"> <subcell>item1</subcell> <subcell>item2</subcell> <subcell>item4</subcell> </cell> <cell column="5">s4_AM1</cell> <cell column="6">accepted</cell> </row> <row row="18"> <cell column="1">supplier</cell> <cell column="2">s5</cell> <cell column="3">item</cell> <cell column="4">item1</cell> <cell column="5">s5_AM1</cell> <cell column="6">accepted</cell> </row> </range> complete XSLT without using string(): <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:key name="itemInvitesKey" match="//row[cell[@column=3] = 'item']" use="cell[@column=4]"/> <xsl:key name="itemInvitesKey" match="//row[cell[@column=3] = 'item']" use="(cell[@column=4]/subcell)"/> <xsl:template match="/"> <xsl:apply-templates select="range"/> </xsl:template> <xsl:template match="range"> <xsl:text>item1
</xsl:text> <xsl:for-each select="key('itemInvitesKey', 'item1')"> <xsl:value-of select="cell[@column=2]"/> <xsl:text>
</xsl:text> </xsl:for-each> <xsl:text>
</xsl:text> <xsl:text>item2
</xsl:text> <xsl:for-each select="key('itemInvitesKey', 'item2')"> <xsl:value-of select="cell[@column=2]"/> <xsl:text>
</xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> correct output: item1 s5 s3 s4 item2 s3 s4 Exact same XSLT as above, except xsl:key use attribute using string(): <xsl:key name="itemInvitesKey" match="//row[cell[@column=3] = 'item']" use="string(cell[@column=4]/subcell)"/> Output: same as above, except no matches were returned except for the first key (item1) item1 s5 s3 s4 item2 __________________________________ Do you Yahoo!? Yahoo! Finance Tax Center - File online. File on time. http://taxes.yahoo.com/filing.html
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] making div section with x, rj_peterson | Thread | RE: [xsl] xsl:key use attribute usi, Michael Kay |
RE: [xsl] Elminitate redundancy by , Pieter Reint Siegers | Date | RE: [xsl] Elminitate redundancy by , Kenny Akridge |
Month |