[Home] [By Thread] [By Date] [Recent Entries]
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: ====================================================================== 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
|

Cart



