xslt祖父母的条件和

时间:2016-05-14 15:24:09

标签: xml xslt xpath

我有一个简单的for-each如下所示。基本上我要做的就是让所有studentResults获得某个studentID。这部分似乎按预期工作。

if语句检查result的总和是否大于59。这部分也按预期工作。

现在到了什么不起作用。一旦满足这个条件(总和大于59),它应该向上两个父母,然后在该节点中求和。如XML树所示。

XSLT

        <xsl:for-each select="//studentResult[@studentID=$sid]">
          <xsl:if test="sum(result) &gt; 59">
            <xsl:value-of select="sum(../../creditPoints)"/>
          </xsl:if>
        </xsl:for-each>

XML

<root>
  <units>
    <unit>
      <title>Accounting I</title>
      <creditPoints>20</creditPoints>

      <studentResults>
        <studentResult studentID="#1092">
          <result>30</result>
          <result>10</result>
          <result>40</result>
        </studentResult>

        <studentResult studentID="#1800">
          <result>30</result>
          <result>10</result>
          <result>8</result>
        </studentResult>
      </studentResults>

    </unit>

    <unit>
      <title>Economics II</title>
      <creditPoints>25</creditPoints>

      <studentResults>
        <studentResult studentID="#1092">
          <result>20</result>
          <result>10</result>
          <result>35</result>
        </studentResult>

        <studentResult studentID="#2500">
          <result>25</result>
          <result>5</result>
          <result>40</result>
        </studentResult>
      </studentResults>

    </unit>
  </units>
</root>

在提交问题之前,我想到了以下备用XSLT的想法。

替代XSLT : 即使学生不在该单元中,也会打印所有creditPoints的总数。

      <xsl:for-each select="/root/units/unit/studentResults/studentResult[@studentID=$sid][sum(result) &gt; 59]">
            <xsl:value-of select="sum(ancestor::units/unit/creditPoints)"/>
      </xsl:for-each>

请注意,这是XSLT 1.0。

1 个答案:

答案 0 :(得分:2)

或许只是用

替换整个for-each
<xsl:value-of select="sum(/root/units/unit[studentResult/studentResult[@studentID = $sid][sum(result) > 59]]/creditPoints)"/>

就是你想要的。