Могу ли я хранить суммы значений в xsl? - PullRequest
0 голосов
/ 09 июня 2009

Скажем, у меня есть фрагмент XML, через который я прохожу с XSL:

<Columns>
   <Column width="100">
   <Column width="50">
   <Column width="75">
   <Column width="33">
</Columns>

По сути, я хочу, чтобы, проходя по каждому узлу, мне нужно было сохранить сумму предыдущих атрибутов 'width', которые будут использоваться для текущего узла Column. Например, когда я достигну последнего узла Column (с шириной 33), я бы хотел получить доступ к сумме всех предыдущих значений ширины в некоторой переменной (100 + 50 + 75). Я знаю, что значения переменных нельзя изменить после установки в XSL, поэтому мне интересно, есть ли способ использовать параметры шаблона или что-то для этого. Заранее спасибо!

1 Ответ

1 голос
/ 09 июня 2009

По сути, вы используете рекурсию шаблона и ограничивает набор, передаваемый только следующему брату. Начиная с первого элемента, вы можете непрерывно передавать обновленные значения следующему вызову шаблона.

<xsl:template match="/">
    <xsl:apply-templates select="Columns/Column[1]" />
</xsl:template>

<xsl:template match="Column">
    <xsl:param name="runningtotal" select="0"/>
    [<xsl:value-of select="@width"/>:<xsl:value-of select="$runningtotal+@width"/>]
    <xsl:apply-templates select="following-sibling::Column[1]" >
        <xsl:with-param name="runningtotal" select="$runningtotal+@width"/>
    </xsl:apply-templates>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...