我尝试了这个,修改了“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="."/>
</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问:
我有一个字符串,其中数据由分隔符“|”分隔,并存储在一个变量中。我想通过在XSL中根据分隔符划分上述字符串来创建一个数组,并希望在一个for循环中访问该数组
那么,该字符串可能是:“alfa,beta,gama,delta”
分隔符以变量形式呈现:
<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>
我们可以像使用数组一样使用for循环访问节点。
<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>
tokenize()
扩展函数返回一个节点集或结果树片段(可以使用另一个扩展函数node-set()
将其转换为节点集)。这个节点集可以按照你指定的索引访问,因为表示令牌的元素与父节点的子节点一一对应,顺序排列。 - LarsH