2017-10-16 8 views
0

ネストされたループと値をグローバルに保持するXSLTに関する知識はありません。以下は達成したいことです。XSLTネストされたループと合計

標準(階層1) スチューデント(階層2) 結果(階層3) - >これは、すべての被験者のすべての結果(マーク)を見て、マーク40

上にあるときに表示するプロシージャを呼び出します

今、要件は、私は40以上のすべての科目の結果/マークを追加する必要があります。また、私はすべての学生の合計結果を得る必要があります。

XSLTでは、スコープは次の生徒をループするときに有効ではなくなりました。すべての生徒の合計をグローバル変数に保持するにはどうすればよいですか?

ありがとうございました。

Sample

マークが黄色のものが合計を計算するために考慮されるべきではない強調表示さ40よりも大きいすべての生徒のために、すべての科目の合計を計算する必要があります。

+0

作業したいXMLのサンプルを提供する場合は、多くの役に立ちます。 –

+0

入力XMLのサンプルと予想される出力が、外部サイトの画像ではなく質問内で提供された場合にも役立ちます。 –

答えて

0

XSLTは関数型言語です。変数は宣言されたときに値が割り当てられ、その値は決して変更されません。

XSLTでは、思考を形作っているように見える他のプログラミング言語とは異なり、各学生のすべてのマーク、または40を超えるすべてのマークを計算しません。代わりに、その変数の値を指定します。

<!--* calculate the total sum of marks awarded to all students. 
    * (This makes no sense, but it is what the description says. 
    * Mine not to reason why.) 
    *--> 
<xsl:variable name="total-marks" 
       select="sum(//student/subject/@mark)"/> 


<!--* calculate the total sum of marks greater than 40 awarded 
    * to all students. 
    * (This also makes no sense, but it is again what the description 
    * appears to say. Glad this is someone else's problem, not mine.) 
    *--> 
<xsl:variable name="total-marks-over-40" 
       select="sum(//student/subject/@mark[. > 40])"/> 

ような何か私は本当にあなたが何をしているかあなたの説明から理解していないので、これらの変数が正しいことを計算していない可能性があります。私はあなたが後で、平均マークと40を超える平均マークを計算するためにこれらを使用し、与えられたマークの数と40以上のマークの数でそれらを割ることによって、それが理にかなっていると思います。

これらの変数は、あなたが念頭に置いておいたXMLの構造に合っていないことはほとんどありません。与えられた標本表現は、各生徒が要素で表され、数字がmarkの子どもの中にその生徒に与えられた数字を表すsubjectの子を含むと仮定しています。

関連する問題