Re: [xsl] Data structure in XSLT?

Subject: Re: [xsl] Data structure in XSLT?
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Tue, 23 Apr 2002 14:40:58 -0400
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"/>:&#xA;<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



Current Thread