Difference between revisions of "Count-Elements.xsl"
Jump to navigation
Jump to search
(Stylesheet to count elements) |
m (*doh* forgot to put it in its category!) |
||
| Line 37: | Line 37: | ||
</xsl:stylesheet> | </xsl:stylesheet> | ||
</pre> | </pre> | ||
| + | |||
| + | [[Category:XSLT]] | ||
Revision as of 15:03, 21 April 2005
This is a short stylesheet which simply counts the elements used in a document and outputs this as the contents of a <tagsDecl> element.
For example, if you run this script on itself, you get:
<?xml version="1.0" encoding="UTF-8"?> <tagsDecl> <tagUsage gi="tagsDecl">1</tagUsage> <tagUsage gi="tagUsage">1</tagUsage> <tagUsage gi="xsl:for-each">1</tagUsage> <tagUsage gi="xsl:key">1</tagUsage> <tagUsage gi="xsl:output">1</tagUsage> <tagUsage gi="xsl:sort">1</tagUsage> <tagUsage gi="xsl:stylesheet">1</tagUsage> <tagUsage gi="xsl:template">1</tagUsage> <tagUsage gi="xsl:value-of">1</tagUsage> </tagsDecl>
But that is correct because there is only one instance of each element in the script itself:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="gis" match="*" use="name()"/>
<xsl:template match="node()">
<tagsDecl>
<xsl:for-each select="//*[generate-id(.)=generate-id(key('gis',name(.))[1])]">
<xsl:sort select="name()"/>
<tagUsage gi="{name(.)}"><xsl:value-of select="count(key('gis', name(.)))" /></tagUsage>
</xsl:for-each>
</tagsDecl>
</xsl:template>
</xsl:stylesheet>