私は単純なfor-each
を以下に示します。基本的に私がしようとしているのは、すべてstudentResults
を特定のstudentID
とすることです。この部分は意図したとおりに動作するように見えます。xslt祖父母の条件付き合計
result
の合計が59
より大きいかどうかを確認します。このパーツも意図したとおりに動作します。
何がうまくいかないのですか?この条件が満たされると(合計が59より大きい)、次に2つの親を上にして、そのノードの値を合計する必要があります。 XMLツリーに示されているとおりです。
XSLT
<xsl:for-each select="//studentResult[@studentID=$sid]">
<xsl:if test="sum(result) > 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) > 59]">
<xsl:value-of select="sum(ancestor::units/unit/creditPoints)"/>
</xsl:for-each>
これはXSLT 1.0です。
"何がうまくいかない"とは、あなたが望む結果とあなたが得た結果を表示することを意味してください。 –