XML/XSLT stylesheet/count
count element with certain attribute name
File: Data.xml
<employees>
<employee hireDate="04/23/1999" officer="yes">
<last>A</last>
<first>B</first>
<salary>1000</salary>
</employee>
<employee hireDate="09/01/1998" officer="no">
<last>C</last>
<first>D</first>
<salary>95000</salary>
</employee>
<employee hireDate="08/20/2000">
<last>E</last>
<first>F</first>
<salary>8900</salary>
</employee>
</employees>
File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
<xsl:template match="employees">
A. Number of employees:
<xsl:value-of select="count(employee)" />
B. Number of officers:
<xsl:value-of select="count(employee[@officer="yes"])" />
C. Number of employees without "officer" attribute set:
<xsl:value-of select="count(employee[not(@officer)])" />
D. Number of comments in "employees" element:
<xsl:value-of select="count(//comment())" />
</xsl:template>
<xsl:template match="employee" />
</xsl:stylesheet>
Output:
A. Number of employees:
3
B. Number of officers:
1
C. Number of employees without "officer" attribute set:
1
D. Number of comments in "employees" element:
0
Count node
File: Data.xml
<?xml version="1.0" encoding="utf-8"?>
<People>
<Person>
<Name>name 1</Name>
<Description>description 1</Description>
</Person>
<Person>
<Name>name 2</Name>
<Description>description 2</Description>
</Person>
</People>
File: Transform.xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head>
<title>
About
<xsl:value-of select="count(/People/Person)" />
.
</title>
</head>
<body>
<h3>
about
<xsl:value-of select="count(/People/Person)" />
people.
</h3>
<br />
<xsl:apply-templates select="/People/Person" />
</body>
</html>
</xsl:template>
<xsl:template match="Person">
<h3>
<xsl:value-of select="Name" />
</h3>
<p>
<xsl:value-of select="Description" />
</p>
<br />
</xsl:template>
</xsl:stylesheet>
Output:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
About
2
.
</title>
</head>
<body>
<h3>
about
2
people.
</h3><br><h3>name 1</h3>
<p>description 1</p><br><h3>name 2</h3>
<p>description 2</p><br></body>
</html>
Count tokens
File: Data.xml
<?xml version="1.0"?>
<Employees>
<Person>
this is a test
</Person>
</Employees>
File: Transform.xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h3>String handling</h3>
<xsl:variable name="sentence" select=""this is a test"" />
The sentence: "
<xsl:value-of select="$sentence" />
" has
<xsl:value-of
select="count(tokenize($sentence, "\s+"))" />
words.
<br />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Output:
<html>
<body>
<h3>String handling</h3>
The sentence: "
this is a test
" has
4
words.
<br></body>
</html>