2010-12-06 16 views
5

私は研究を行っていますが、属性を操作するときの解決策しか見つかりませんでした。XSL属性を使用せずに値に応じてノードの数を数える方法は?

私は最近XSLを研究し始めました。私はxmlファイルをhtmlに変換するためにそれを使用したいと思います。抽出したいデータには、いくつのノードに一定の価値があるかを示す必要があります。

XMLは、以下の構造を有している:私は出て欲しいもの

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

がある: 2(の数が失敗) 1(パスの数)

いずれかがこれで私の手を与えることができます仕事 ?たぶん

答えて

11

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

。ありがとう、たくさんの人! – 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

それは動作します。ありがとう、たくさんの人! – Artur

+0

素晴らしい!答えを受け入れることを忘れないでください –

3

このスタイルシート:

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

出力:それは作品

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

ありがとうございますアレハンドロ! – Artur

+1

@Artur:あなたはウェルカムです。 –

関連する問題