2010-12-06 6 views
5

J'ai fait de la recherche, mais je n'ai trouvé que des solutions lorsque je travaillais sur des attributs.XSL comment compter le nombre de noeuds en fonction de la valeur sans utiliser d'attributs?

J'ai récemment commencé à étudier XSL. Je voudrais l'employer pour transformer mon dossier de xml en html un. Les données que je veux extraire devraient indiquer combien de nœuds ont une certaine valeur.

XML a une structure suivante:

<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> 

ce que je veux comme départ: 2 (nombre d'échecs) 1 (nombre de passes)

tout pourrait me donner un coup de main tâche ?

Répondre

11

Peut-être:

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

Il fonctionne. Merci beaucoup les gars! – Artur

2
<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> 
+0

Cela fonctionne. Merci beaucoup les gars! – Artur

+0

Super! N'oubliez pas d'accepter une réponse. –

3

Cette feuille de style:

<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> 

Sortie:

2 (number of Fails) 1 (number of Passes) 
+1

Merci Alejandro! – Artur

+1

@Artur: Vous êtes bienvenu. –

Questions connexes