This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Data structure in XSLT?
- From: Charles Chan <charles_cynthia at yahoo dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Wed, 24 Apr 2002 09:50:25 -0700 (PDT)
- Subject: Re: [xsl] Data structure in XSLT?
- Reply-to: xsl-list at lists dot mulberrytech dot com
Wow! You opened my eyes!
Thanks,
Charles
--- Wendell Piez <wapiez@mulberrytech.com> 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@mulberrytech.com
> 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