Переменные XSLT являются неизменяемыми (не могут быть изменены) и строго ограничены.
Вы всегда можете обернуть xsl:for-each
xsl:variable
. Любые текстовые значения, выделенные в пределах xsl:for-each
, будут присвоены xsl:variable
.
Например, следующая таблица стилей объявляет переменную textValueCSV
. В пределах xsl:for-each
он использует xsl:value-of
и xsl:text
. Все текстовые значения присваиваются переменной textValuesCSV
, которая используется за пределами из xsl:for-each
для выбора ее значения.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:variable name="textValuesCSV">
<xsl:for-each select="/*/*">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$textValuesCSV"/>
</xsl:template>
</xsl:stylesheet>
Применительно к этому XML:
<doc>
<a>1</a>
<b>2</b>
<c>3</c>
</doc>
Производит этот вывод:
1,2,3