Re: [xsl] Getting a distinct list of node names

Subject: Re: [xsl] Getting a distinct list of node names
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 15 Dec 2003 14:56:41 -0500
At 2003-12-15 20:22 +0100, Manuel Holtgrewe wrote:
Maybe this cannot be accomplished with plain Xslt

It can be done with a simple application of variable-based grouping.


I need to get a distinct list of the node names from all children of one
node. For example, if I have:

    <node:definition>
        <form:validator />
        <form:validator />
        <form:filter />
    </node:definition>

I want to be able to retrieve a list of the names of all tags used
within node:definition. However, it should contain each tag name only
once:

('form:validator', 'form:filter')

I hope the code below helps.


................... Ken

T:\ftemp>type manuel.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<node:definition xmlns:node="node" xmlns:form="form">
  <form:validator/>
  <form:validator/>
  <form:filter/>
</node:definition>

T:\ftemp>type manuel.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="1.0">

<xsl:output method="text"/>

<xsl:template match="*[*]">
  <xsl:value-of select="name(.)"/>:<xsl:text/>

  <xsl:variable name="childnodes" select="*"/><!--all children-->
  <xsl:for-each select="$childnodes">
    <xsl:if test="generate-id(.)=
                  generate-id($childnodes[name(.)=name(current())])">
      <xsl:text/> '<xsl:value-of select="name(.)"/>'<xsl:text/>
    </xsl:if>
  </xsl:for-each>

  <xsl:text>
</xsl:text>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="text()"/>

</xsl:stylesheet>

T:\ftemp>saxon manuel.xml manuel.xsl
node:definition: 'form:validator' 'form:filter'

T:\ftemp>

--
North America (Washington, DC): 3-day XSLT/2-day XSL-FO 2004-02-09
Instructor-led on-site corporate, government & user group training
for XSLT and XSL-FO world-wide:  please contact us for the details

G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
ISBN 0-13-065196-6                       Definitive XSLT and XPath
ISBN 0-13-140374-5                               Definitive XSL-FO
ISBN 1-894049-08-X   Practical Transformation Using XSLT and XPath
ISBN 1-894049-11-X               Practical Formatting Using XSL-FO
Member of the XML Guild of Practitioners:     http://XMLGuild.info
Male Breast Cancer Awareness  http://www.CraneSoftwrights.com/s/bc


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



Current Thread