在XSLT中访问for-each之外的变量

时间:2014-05-28 20:26:56

标签: xml variables loops xslt scope

我目前遇到的问题是我的XSLT文档中的某些变量的范围,这里是相关代码部分:

<xsl:for-each select="all/courses/allcourses/course">
  <a>
    <xsl:attribute name="href">javascript:void(0)</xsl:attribute>
    <xsl:attribute name="onclick">javascript:transform('<xsl:value-of select="c_code"/>');</xsl:attribute>
    <xsl:value-of select="c_title"/>
  </a>
  <br/>
  <br/>
  <course code="{c_code}">
    <strong> Enrolled: </strong>
    <xsl:variable name="courseCreditPoints" select="coursecp"/>
    <xsl:variable name="numberOfEnrolled" select="count(student[sum(results/u_points)!= $courseCreditPoints])"/>
    <xsl:value-of select="$numberOfEnrolled"/>
    <br/>
    <strong> Graduated: </strong>
    <xsl:value-of select="count(student[sum(results/u_points) = $courseCreditPoints])"/>
    <br/>
    <xsl:variable name="numberOfGraduates" select="count(student[sum(results/u_points) = $courseCreditPoints])"/>
  </course>
</xsl:for-each>

<br/>
<strong> Total number of students: </strong>
<xsl:variable name="totalStudents" select="count(//studentID)"/>
<xsl:value-of select="$totalStudents"/>
<strong> Total enrolled students: </strong>

我想要实现的目标:我正在尝试访问其外的for-each循环中的变量。我想要做的是从变量$numberOfGraduates中减去$totalStudents个变量(我可以访问这个变量,因为它是在循环之外声明的)但我不能这样做{{1在循环中声明。我试过在循环中减去它,这有效,但是它会多次打印出结果。

$numberOfGraduates循环中访问这些变量的最佳方法是什么?

谢谢你们!

1 个答案:

答案 0 :(得分:0)

你的变量numberOfGraduates是每个课程,必须像你一样单独计算每门课程。

可变的totalStudents是所有课程的一个。一个学生可以参加两门课程,确保你不算一个学生两次:

<xsl:variable name="totalStudents" select="count(distinct-values(//studentID))"/>