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(_at_)CraneSoftwrights(_dot_)com
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