Re: [xsl] Data structure in XSLT?

Subject: Re: [xsl] Data structure in XSLT?
From: Charles Chan <charles_cynthia@xxxxxxxxx>
Date: Wed, 24 Apr 2002 09:50:25 -0700 (PDT)
Wow! You opened my eyes!

Thanks,
Charles


--- Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> wrote:
> Charles,
> 
> You can't use a hash map (the data model doesn't
> include such a thing) but 
> you can use a key, which is almost the same thing
> (or can be made to work 
> that way anyway):
> 
> <xsl:key name="competencies-by-category"
> match="competency" 
> use="substring-before(Competency/@id, ':')"/>
> 
> The value of the key for each Competency is thus
> "programming_language", 
> "application_server" etc.
> 
> Then:
> 
> <xsl:template match="Competency">
>    <xsl:variable name="this-category"
> select="substring-before(@id, ':')"/>
>    <xsl:if
> test="count(.|key('competencies-by-category', 
> $this-category)[1])=1">
>    <!-- the test uses an idiom to test node
> identity, throwing away Competency
>         elements after the first in every category
> -->
>      <xsl:value-of
> select="$this-category"/>:
<xsl:text/>
>      <xsl:for-each
> select="key('competencies-by-category',
> $this-category)">
>      <!-- now we go get all the Competency elements
> in this category and 
> list em -->
>        <xsl:if test="position()!=1">
>           <!-- no comma before the first -->
>           <xsl:text>, </xsl:text>
>        </xsl:if>
>        <xsl:value-of select="substring-after(@id,
> ':')"/>
>      </xsl:for-each>
>    </xsl:if>
> </xsl:template>
> 
> The code assumes that you never have more than one
> ':' in an @id. Also, 
> de-duplicating is left as an exercise.
> 
> Cheers,
> Wendell
> 
> At 01:17 PM 4/23/2002, you wrote:
> >Hi, is there anyway to build some data structure in
> >XSLT? I have a sample input file that looks like
> this:
> >
> ><Qualifications>
> >   <Competency name="Java">
> >     <Competency id="programming_language:java"/>
> >   </Competency>
> >   <Competency name="C++">
> >     <Competency id="programming_language:cpp"/>
> >   </Competency>
> >   <Competency name="C#">
> >     <Competency id="programming_language:csharp"/>
> >   </Competency>
> >   <Competency name="WebLogic">
> >     <Competency id="application_server:weblogic"/>
> >   </Competency>
> >   <Competency name="WebSphere">
> >     <Competency
> id="application_server:websphere"/>
> >   </Competency>
> ></Qualifications>
> >
> >The output I want is:
> >
> >programming_language:
> >Java, C++, C#
> >
> >application_server:
> >WebLogic, WebSphere
> >
> >The Competency elements can be in any order. I was
> >thinking it would be nice if I have the luxury to
> use
> >a hash map or something like that.
> >
> >Any idea?
> >
> >Thanks
> >Charles
> 
> 
>
======================================================================
> Wendell Piez                           
> mailto:wapiez@xxxxxxxxxxxxxxxx
> Mulberry Technologies, Inc.               
> http://www.mulberrytech.com
> 17 West Jefferson Street                    Direct
> Phone: 301/315-9635
> Suite 207                                         
> Phone: 301/315-9631
> Rockville, MD  20850                                
> Fax: 301/315-8285
>
----------------------------------------------------------------------
>    Mulberry Technologies: A Consultancy Specializing
> in SGML and XML
>
======================================================================
> 
> 
>  XSL-List info and archive: 
> http://www.mulberrytech.com/xsl/xsl-list
> 


__________________________________________________
Do You Yahoo!?
Yahoo! Games - play chess, backgammon, pool and more
http://games.yahoo.com/

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


Current Thread