XSL如何根据值而不使用属性来计算节点数?

时间:2010-12-06 09:07:29

标签: xml xslt

我做过研究,但是在操作属性时我只发现了解决方案。

我最近开始研究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(通过次数)

任何人都可以帮我完成这项任务吗?

3 个答案:

答案 0 :(得分:11)

也许:

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

答案 1 :(得分: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)

答案 2 :(得分: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>