2017-02-20 15 views
0

私は今、私はこれらの.xmlファイル.xmlファイルがコレクションを介して.xslスタイルシートに取り込まれた場合の合計値の計算方法

<xsl:template match="/garmin:TrainingCenterDatabase"> 
    <xsl:for-each select="./garmin:Activities/garmin:Activity"> 
     <xsl:for-each select="./garmin:Lap"> 
     <tr> 
     <td><xsl:value-of select="tokenize(base-uri(.),'\.')[2]" /></td> 
     <td><xsl:value-of select="@StartTime" /></td> 
     <td><xsl:value-of select="garmin:TotalTimeSeconds" /></td> 
     <td><xsl:value-of select="garmin:DistanceMeters" /> m</td> 
     <td><xsl:value-of select="garmin:Calories" /></td> 
     <xsl:call-template name="sum"> 
      <xsl:with-param name="elements-to-sum" select="//garmin:DistanceMeters" /> 
     </xsl:call-template> 
     </tr> 
     </xsl:for-each> 
    </xsl:for-each> 
</xsl:template> 
のコンテンツを処理する他のテンプレートを持って

<xsl:template name="main"> 
    <tbody> 
     <xsl:apply-templates select="collection('file:///d:/in/?select=*.tcx')"/> 
    </tbody> 
</xsl:template> 

...私はコレクションを使用して自分のスタイルシートに引っ張る.tcxファイルのリストを持っています

私はすべてのDistanceMetersのローリング・サムを計算しようとしますが、私が期待している方法では動作していないところで、合計テンプレート(すべてのDistanceMetersを合計するために再帰的に呼び出します)を持っています。私はコレクション内のすべての要素を個別に取り込み、新しい要素ごとに合計を再開します。

これらの合計を計算する方法はありますか?たとえば、結果に番号を付けるために使用できるシーケンス番号)全体のコレクションを渡って...?

答えて

0

グローバルパラメータまたは<xsl:variable name="coll1" select="collection('file:///d:/in/?select=*.tcx')"/>を宣言すると、必要に応じて<xsl:value-of select="sum($coll1//garmin:DistanceMeters)"/>を簡単に計算できます。変数<xsl:apply-templates select="$coll1"/>を使用するように<xsl:apply-templates select="collection('file:///d:/in/?select=*.tcx')"/>を変更することもできます。

+0

ありがとうございました!ちょっと速い:新しく導入された変数を使ってこのコレクションを参照すると、これはスタイルシートプロセッサがすべてのドキュメントを何度も何度もスキャンすることを意味しますか? –

+0

グローバル変数を使用してコレクションを処理する必要があるすべての場所で参照すると、プロセッサはすべてのファイルを一度読み込み、一度構築したツリーのシーケンスで処理します。 –

+0

偉大な、ありがとう! –

関連する問題