Mega Code Archive

 
Categories / XML Tutorial / XSLT StyleSheet
 

Count elements which occured in XML source

File: Data.xml <?xml version="1.0" encoding="utf-8"?> <data>     <AAA>       <BBB id="b1">         <CCC name="q" size="12"/>         <EEE id="e1">           <SSS/>         </EEE>         <CCC weight="45"/>         <CCC/>       </BBB>     </AAA>     <AAA>       <EEE id="e2"/>       <CCC>         <DDD/>       </CCC>     </AAA> </data> File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet       version="1.0"       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">     <xsl:template match="/">       <TABLE border="1" width="90%">         <TR>           <td>Element</TH>           <td>Occurs</TH>         </TR>         <xsl:for-each select="/descendant::*">           <xsl:variable name="pos" select="position()"/>           <xsl:if test="not(/descendant::*[position() &lt; $pos and name()=name(current())])">             <TR>               <TD>                 <xsl:value-of select="name()"/>               </TD>               <TD>                 <xsl:value-of select="count(/descendant::*[name()=name(current())])"/>               </TD>             </TR>           </xsl:if>         </xsl:for-each>         <TR>           <td>Total count</TH>           <td>             <xsl:value-of select="count(//*)"/>           </TH>         </TR>       </TABLE>     </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><TABLE border="1" width="90%"><TR><td>Element</TH><td>Occurs</TH></TR><TR><TD>data</TD><TD>1</TD></TR><TR><TD>AAA</TD><TD>2</TD></TR><TR><TD>BBB</TD><TD>1</TD></TR><TR><TD>CCC</TD><TD>4</TD></TR><TR><TD>EEE</TD><TD>2</TD></TR><TR><TD>SSS</TD><TD>1</TD></TR><TR><TD>DDD</TD><TD>2</TD></TR><TR><td>Total count</TH><td>13</TH></TR></TABLE>