使用XSLT计算与特定条件匹配的元素数

时间:2016-03-22 07:50:45

标签: xslt

我需要计算未通过考试的学生人数或有错误数据的学生人数。这if loop条件正常,但学生人数错误。

<xsl:if test ="$StudentFinalmark &gt; 100 or $StudentFinalmark &lt; 49">
    <xsl:value-of select = "count(StudentFinalmark)"/>            
</xsl:if>

例如,如果有四名失败的学生和有两个错误日期的学生,那就是 111111

请帮我解决问题。

1 个答案:

答案 0 :(得分:2)

假设您的xml看起来像这样(根据您的评论):

<Students>
    <StudentResults>
        <Marks>
            <StudentAssign1>40</StudentAssign1>
            <StudentAssign2>40</StudentAssign2>
            <StudentExam>40</StudentExam>
        </Marks>
    </StudentResults>
    <StudentResults>
        <Marks>
            <StudentAssign1>1</StudentAssign1>
            <StudentAssign2>2</StudentAssign2>
            <StudentExam>3</StudentExam>
        </Marks>
    </StudentResults>
    <StudentResults>
        <Marks>
            <StudentAssign1>33</StudentAssign1>
            <StudentAssign2>33</StudentAssign2>
            <StudentExam>33</StudentExam>
        </Marks>
    </StudentResults>
</Students>
像这样的XSLT会返回你所追求的结果:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:element name="Output">
            <xsl:value-of select="count(Students/StudentResults[sum(Marks/*) &gt; 100 or sum(Marks/*) &lt; 49])" />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

返回结果:

<Output>2</Output>

它返回两个,因为在上面的示例XML中,第一个StudentResults的总和为120(由于它大于100而失败)而第二个的总和为6(由于它小于49而失败)

技巧是输出单个项目,该项目是您通过xpath选择的元素的计数,而不是通过“if”和“for”组合。也不需要使用变量。