RE: [xsl] Extracting Unique element names and attributes from a XML file

Subject: RE: [xsl] Extracting Unique element names and attributes from a XML file
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 28 Oct 2008 09:51:27 -0000
In XSLT 2.0 it's simply

distinct-values(//*/name())
distinct-values(//@*/name())

If you really need to do it with XSLT 1.0, eliminating duplicates is
essentially the same problem as grouping, and you can use the Muenchian
grouping approach.

The preceding-sibling grouping technique isn't going to work (a) because
your nodes are not siblings of each other, and (b) because it only works
where the grouping key is the string-value of the node, not where it is some
other function of the node (here, it's name). Muenchian grouping works for
any string-valued function of a node.

Michael Kay
http://www.saxonica.com/


> -----Original Message-----
> From: Ganesh Babu N [mailto:nbabuganesh@xxxxxxxxx] 
> Sent: 28 October 2008 09:38
> To: XSL
> Subject: [xsl] Extracting Unique element names and attributes 
> from a XML file
> 
> Hai All,
> 
> I need to list out all elements and attribute (unique) in a 
> text file for mapping with other XML file.
> 
> I am able to get all the elements and attributes but I am 
> unable to achieve the uniqueness. Can any body help on this.
> 
> I have tested with <xsl:sort> and not(preceding-sibling::* = 
> current()). Still I am unable to get the uniqueness.
> 
> My XSL is follows:
> 
> <?xml version="1.0"?>
> <xsl:stylesheet 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
> 
> 	<xsl:output method="text"/>
> 
> 	<xsl:template match="/">
> 		<xsl:for-each select="//*">
> 			<xsl:value-of select="local-name(.)"/>
> 			<xsl:text> </xsl:text>
> 			<xsl:choose>
> 				<xsl:when test="@*">
> 					<xsl:for-each 
> select="@*">@<xsl:value-of select="local-name(.)"/><xsl:text> 
> </xsl:text>
> 					</xsl:for-each>
> 					<xsl:text>
> 					</xsl:text>
> 				</xsl:when>
> 				<xsl:otherwise>
> 					<xsl:text>
> 					</xsl:text>
> 				</xsl:otherwise>
> 			</xsl:choose>
> 		</xsl:for-each>
> 	</xsl:template>
> </xsl:stylesheet>
> 
> Regards,
> Ganesh

Current Thread