RE: [xsl] Another key question

Subject: RE: [xsl] Another key question
From: Chuck White <chuckwh@xxxxxxxxxxx>
Date: Thu, 17 Oct 2002 16:14:09 -0700
Using current() in a key's use attribute is tricky with MSXML. See:

http://www.biglist.com/lists/xsl-list/archives/200206/msg00707.html

which describes a known bug in MSXML4. 

Chuck White
-------------------------
Author, Mastering XSLT, Sybex Books
Co-Author, Mastering XML Premium Edition, Sybex Books
http://www.javertising.com/webtech/

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx [mailto:owner-xsl-
> list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Richard Lander
> Sent: Thursday, October 17, 2002 11:38 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Another key question
> 
>  Hello,
> 
> I'm trying to do something with keys and having a bit of trouble. In
doing
> so, I've done some research with some sample data and come up with the
> following results. I'm using system.xml.
> 
> C:\temp\XSLTProject2->
> - type XSLTProject2_data.xml
> <test>
>         <section>
>                 <title>H1</title>
>         </section>
>         <section>
>                 <title>H2</title>
>         </section>
>         <section>
>                 <title>H2</title>
>         </section>
>         <section>
>                 <title>H3</title>
>         </section>
>         <section>
>                 <title>H2</title>
>         </section>
>         <section>
>                 <title>H1</title>
>         </section>
>         <section>
>                 <title>H2</title>
>         </section>
> </test>
> 
> C:\temp\XSLTProject2->
> - type XSLTProject2.xslt
> <?xml version="1.0"?>
> <xslt:transform xmlns:xslt="http://www.w3.org/1999/XSL/Transform";
> version="1.0">
> 
> 
>         <xslt:key name="sections" match="section" use="generate-
> id(current())"/>
> 
> 
>         <xslt:template match="/">
>                 <xslt:apply-templates/>
>         </xslt:template>
> 
>         <xslt:template match="test">
>                 <test>
>                         <xslt:apply-templates select="section"/>
> 
>                 </test>
>         </xslt:template>
> 
>         <xslt:template match="section">
>                 <xslt:variable name="myID" select="generate-id(.)"/>
> 
>                 <section>
>                         <title><xslt:value-of select="title"/></title>
>                         <para><xslt:value-of select="$myID"/></para>
>                         <para><xslt:value-of select="generate-
> id(key('sections',
> $myID))"/></para>
> 
>                 </section>
>         </xslt:template>
> 
> 
> </xslt:transform>
> 
> C:\temp\XSLTProject2->
> - type out.xml
> <?xml version="1.0" encoding="utf-8" ?>
> <test>
>         <section>
>                 <title>H1</title>
>                 <para>XSLTsection120120120</para>
>                 <para>XSLTsection120120120</para>
>         </section>
>         <section>
>                 <title>H2</title>
>                 <para>XSLTsection121120120</para>
>                 <para>XSLTsection120120120</para>
>         </section>
>         <section>
>                 <title>H2</title>
>                 <para>XSLTsection122120120</para>
>                 <para>XSLTsection120120120</para>
>         </section>
>         <section>
>                 <title>H3</title>
>                 <para>XSLTsection123120120</para>
>                 <para>XSLTsection120120120</para>
>         </section>
>         <section>
>                 <title>H2</title>
>                 <para>XSLTsection124120120</para>
>                 <para>XSLTsection120120120</para>
>         </section>
>         <section>
>                 <title>H1</title>
>                 <para>XSLTsection125120120</para>
>                 <para>XSLTsection120120120</para>
>         </section>
>         <section>
>                 <title>H2</title>
>                 <para>XSLTsection126120120</para>
>                 <para>XSLTsection120120120</para>
>         </section>
> </test>
> 
> Is the result above correct? I get the following result out of MSXML4.
> MSXML3 is mostly the same as this (MSXML4), except that the first
section
> has a string in the second para that is equal to the string in the
first
> para.
> 
> <?xml version="1.0" ?>
> <test>
> 	<section>
> 		<title>H1</title>
> 		<para>IDAEAWY</para>
> 		<para></para>
> 	</section>
> 	<section>
> 		<title>H2</title>
> 		<para>IDAGAWY</para>
> 		<para></para>
> 	</section>
> 	<section>
> 		<title>H2</title>
> 		<para>IDAIAWY</para>
> 		<para></para>
> 	</section>
> 	<section>
> 		<title>H3</title>
> 		<para>IDAKAWY</para>
> 		<para></para>
> 	</section>
> 	<section>
> 		<title>H2</title>
> 		<para>IDAMAWY</para>
> 		<para></para>
> 	</section>
> 	<section>
> 		<title>H1</title>
> 		<para>IDAOAWY</para>
> 		<para></para>
> 	</section>
> 	<section>
> 		<title>H2</title>
> 		<para>IDAQAWY</para>
> 		<para></para>
> 	</section>
> </test>
> 
> What should happen?
> 
> My main question, is what does 'current()' mean in the context in
which
> I've used it within xsl:key.
> 
> I'd like to do something like this:
> 
> 	<xslt:key name="sections" match="section" use="generate-
> id(preceding-sibling::section[title =
> translate(current()/title,'23456789','12345678')][1])"/>
> 
> 
> Thanks,
> 
> Rich
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread