2017-02-20 20 views
0

У меня есть список .tcx файлов, которые я тяну в моем стиле лист, используя коллекцию ...Как вычислить сумму значений, если файлы .xml вытягиваются через коллекцию в таблицу стилей .xsl?

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

Теперь у меня есть другой шаблон, где я обрабатывать содержимое этих файлов .xml

<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> 

Как вы можете видеть, у меня есть шаблон суммы (который вызывает рекурсивно, чтобы суммировать все дистанционныеметры), где я пытаюсь вычислить текущую сумму всех дистанционных счетчиков, но он не работает так, как я ожидаю. Я беру все элементы в сборнике отдельно и перезапускает сумму с каждым новым элементом ...

Есть ли способ рассчитать эти скользящие суммы (или другие вещи, такие как порядковый номер, который я могу использовать для подсчета результатов, например) по всей коллекции ...?

ответ

0

Рассмотрите возможность создания глобального параметра или <xsl:variable name="coll1" select="collection('file:///d:/in/?select=*.tcx')"/>, тогда при необходимости вы можете легко вычислить <xsl:value-of select="sum($coll1//garmin:DistanceMeters)"/>. Затем вы можете изменить <xsl:apply-templates select="collection('file:///d:/in/?select=*.tcx')"/>, чтобы использовать переменную <xsl:apply-templates select="$coll1"/>.

+0

Спасибо! Просто быстрый: если я отношусь к этой коллекции с помощью новой введенной переменной, значит ли это, что процессор стиля будет повторно сканировать все документы снова и снова? –

+0

Если вы используете глобальную переменную, а затем ссылаетесь на нее во всех местах, где вам нужно обработать коллекцию, то, насколько я понимаю, процессор читает во всех файлах один раз и работает с последовательностью деревьев, которые он построил один раз. –

+0

Отлично, спасибо! –