Я пытаюсь это сделать, я изменил код "Dimitre Novatchev" и работает для меня: (прошу прощения за мой английский)
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:template match="/*">
<xsl:variable name="_keywords">
<xsl:call-template name="split-to-values">
<xsl:with-param name="_text" select="Keywords-comma-separated"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="msxsl:node-set($_keywords)/value">
<xsl:variable name="_keyword" select="."/>
<!-- ANY CODE -->
</xsl:for-each>
</xsl:template>
<xsl:template match="text()" name="split-to-values">
<xsl:param name="_text"/>
<xsl:if test="string-length($_text)">
<xsl:variable name="_value" select="substring-before($_text, ',')"/>
<xsl:variable name="_next" select="substring-after($_text, ',')"/>
<value>
<xsl:value-of select="$_value"/>
</value>
<xsl:call-template name="split-to-values">
<xsl:with-param name="_text" select="$_next"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Я надеюсь, что это поможет вам
@ Bugude ask
У меня есть строка, в которой данные разделяются разделителем, таким как "|" а также
присутствует в переменной. Я хотел бы создать массив в XSL
разделив вышеуказанную строку на основе разделителя и хотел бы
доступ к тому же в цикле for
Тогда строка может быть: «альфа, бета, гама, дельта»
Разделитель представлен в переменной:
<xsl:variable name="_delimiter">,</xsl:variable>
Я изменил шаблон как:
<xsl:template match="text()" name="split-to-values">
<xsl:param name="_text"/>
<xsl:param name="_delimiter"/>
<xsl:if test="string-length($_text)">
<xsl:variable name="_value" select="substring-before($_text, $_delimiter)"/>
<xsl:variable name="_next" select="substring-after($_text, $_delimiter)"/>
<value>
<xsl:value-of select="$_value"/>
</value>
<xsl:call-template name="split-to-values">
<xsl:with-param name="_text" select="$_next"/>
<xsl:with-param name="_delimiter" select="$_delimiter"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
И мы можем получить доступ к узлам как к массиву с
<xsl:template match="/*">
<!-- _keyword as set a node -->
<xsl:variable name="_keywords">
<xsl:call-template name="split-to-values">
<xsl:with-param name="_text" select="'alfa,beta,gama,delta'"/>
<xsl:with-param name="_delimiter" select="$_delimiter"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="msxsl:node-set($_keywords)/value">
<xsl:variable name="_keyword" select="."/>
<!-- ANY CODE -->
<xsl:value-of select="$_keyword"/>
</xsl:for-each>
</xsl:template>