XSL how to count the number of nodes depending on the value without using attributes?

I was engaged in research, but found only solutions when working with attributes.

I recently started learning XSL. I would like to use it to convert my xml file to html file. The data I want to extract should indicate how many nodes have a specific value.

XML has the following structure:

<Tests>
    <Test>
        <TestName> a </TestName>
        <Date> 12.11.10 </Date>
        <Result> Fail </Result>
    </Test>
    <Test>
        <TestName> b </TestName>
        <Date> 13.11.10 </Date>
        <Result> Fail </Result>
    </Test>
    <Test>
        <TestName> c </TestName>
        <Date> 14.11.10 </Date>
        <Result> Pass </Result>
    </Test>
</Tests>

what i want as output: 2 (number of failures) 1 (number of passes)

can anyone give me a hand on this task?

+5
source share
3 answers

May be:

<xsl:value-of select="count(Tests/Test[normalize-space(Result)='Fail'])" />
+11
source

This style sheet:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:key name="kTestByResult" match="Test" use="normalize-space(Result)"/>
    <xsl:template match="/">
        <xsl:value-of select="concat(count(key('kTestByResult','Fail')),
                                     ' (number of Fails) ',
                                     count(key('kTestByResult','Pass')),
                                     ' (number of Passes)')"/>
    </xsl:template>
</xsl:stylesheet>

Conclusion:

2 (number of Fails) 1 (number of Passes)
+3
source
<xsl:value-of select="count(/Tests/Test/Result[normalize-space(text()) = 'Fail'])" />
<xsl:text> (number of Fails)</xsl:text>

<xsl:value-of select="count(/Tests/Test/Result[normalize-space(text()) = 'Pass'])" />
<xsl:text> (number of Passes)</xsl:text>
+2

All Articles