2016-05-14 8 views
0

私は単純なfor-eachを以下に示します。基本的に私がしようとしているのは、すべてstudentResultsを特定のstudentIDとすることです。この部分は意図したとおりに動作するように見えます。xslt祖父母の条件付き合計

resultの合計が59より大きいかどうかを確認します。このパーツも意図したとおりに動作します。

何がうまくいかないのですか?この条件が満たされると(合計が59より大きい)、次に2つの親を上にして、そのノードの値を合計する必要があります。 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: これは、学生がそのユニットでない場合であってもALL 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です。

+0

"何がうまくいかない"とは、あなたが望む結果とあなたが得た結果を表示することを意味してください。 –

答えて

2

はおそらく、単に

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

で全体for-eachを交換すると、必要なすべてのです。

+0

私は質問を編集していたので掲示される。素晴らしい、私はそれがはるかに簡単だろうと思った!また、それはなぜ<で、>でないのですか?反転はどこで起こりますか?また、それは条件を無視しているようです。しかし、これは正しい軌道に乗っています、ありがとう! – nod64

+0

申し訳ありませんが、オペレーターの変更は私の部分では単に間違いでした。 –

+0

心配する必要はありません。完璧です。ありがとうございました。 – nod64