[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
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.
At 01:17 PM 4/23/2002, you wrote:
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
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"/>:
<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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Data structure in XSLT?, Charles Chan | Thread | Re: [xsl] Data structure in XSLT?, Charles Chan |
Re: [xsl] passing parameter to an X, Joerg Heinicke | Date | Re: [xsl] Data structure in XSLT?, Thomas B. Passin |
Month |
Keywords