XSLT - это функциональный язык , который, среди прочего, означает, что xsl:variable
или xsl:param
, если он указан, не может изменить свое значение.
Это не препятствует возможности выразить в XSLT решение любой проблемы (XSLT завершается по Тьюрингу) и требует только одного, чтобы изменить мышление на основе парадигмы императивного программирования.
Как только вы опубликуете вашу конкретную проблему, многие читатели смогут предоставить полные решения XSLT.
Вот простой пример :
Мы «накапливаем» все нужные значения в переменной, а затем выводим ее:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vOddsAccumulator">
<xsl:apply-templates/>
</xsl:variable>
<xsl:template match="/">
<xsl:value-of select="$vOddsAccumulator"/>
</xsl:template>
<xsl:template match="*/*"/>
<xsl:template match="num[. mod 2 = 1]">
<xsl:value-of select="concat(., ' ')"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к следующему документу XML :
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
желаемый результат получен :
01 03 05 07 09