count() Function |
Counts the number of nodes in a given node-set.
Inputs
A node-set.
Output
The number of nodes in the node-set.
Defined in
XPath section 4.1, Node Set Functions.
Examples
Here's the XML document we'll use to illustrate the count() function:
    <?xml version="1.0"?>
    <test>
      <p>This is a test XML document used by
      several of our sample stylesheets.</p>
      <question>
        <text>When completed, the Eiffel Tower was the
        tallest building in the world.</text>
        <true>You're correct!  The Eiffel Tower was the
        world's tallest building until 1930.</true>
        <false>No, the Eiffel Tower was the world's
        tallest building for over 30 years.</false>
      </question>
      <question>
        <text>New York's Empire State Building knocked
        the Eiffel Tower from its pedestal.</text>
        <true>No, that's not correct.</true>
        <false>Correct!  New York's Chrysler Building,
        completed in 1930, became the world's tallest.</false>
      </question>
    </test>
Here's a stylesheet that illustrates the count() function:
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:output method="text"/>

      <xsl:variable name="newline">
    <xsl:text>
    </xsl:text>
      </xsl:variable>

      <xsl:template match="/">
        <xsl:value-of select="$newline"/>
        <xsl:text>Tests of the count() function:</xsl:text>

        <xsl:value-of select="$newline"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   count(/test)=</xsl:text>
        <xsl:value-of select="count(/test)"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   count(/true)=</xsl:text>
        <xsl:value-of select="count(/true)"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   count(//true)=</xsl:text>
        <xsl:value-of select="count(//true)"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   count(//test|//true|//text)=</xsl:text>
        <xsl:value-of select="count(//test|//true|//text)"/>
        <xsl:value-of select="$newline"/>
        <xsl:variable name="numberOfQuestions" select="count(/test/question)"/>
        <xsl:for-each select="/test/question">
          <xsl:text>   This is question number </xsl:text>
          <xsl:value-of select="position()"/>
          <xsl:text> of </xsl:text>
          <xsl:value-of select="$numberOfQuestions"/>

          <xsl:value-of select="$newline"/>
        </xsl:for-each>
      </xsl:template>

    </xsl:stylesheet>
Here are the results of our stylesheet:
    Tests of the count() function:

       count(/test)=1
       count(/true)=0
       count(//true)=2
       count(//test|//true|//text)=5
       This is question number 1 of 2
       This is question number 2 of 2
The first four invocations of the count() function merely use XPath expressions to count something in the XML document. The last use of count() counts the number of <question> elements in our document and stores that value in a variable. Generating text like item x of y is a common technique; our use of the count() and position() is how this generation is commonly done.