我有一个变量如下:
<xsl:variable name="ARRAY">
One,Two,Three,Four
</xsl:variable>
使用XSLT 2.0,我使用了tokenize函数,并设置了一个数组变量:
<xsl:variable name="tokenizedSample" select="tokenize($ARRAY,',')"/>
并获取数组值:
<xsl:value-of select="$tokenizedSample[1]"/>
不幸的是我必须使用XSLT 1.0并且我不知道替换这种情况...... 我找到了一些创建模板的例子,如下所示:
<xsl:template name="SimpleStringLoop">
<xsl:param name="input"/>
<xsl:if test="string-length($input) > 0">
<xsl:variable name="v" select="substring-before($input, ',')"/>
<field>
<xsl:value-of select="$v"/>
</field>
<xsl:call-template name="SimpleStringLoop">
<xsl:with-param name="input" select="substring-after($input, ',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
并按以下方式调用此模板:
<xsl:variable name="fields">
<xsl:call-template name="SimpleStringLoop">
<xsl:with-param name="input" select="$ARRAY"/>
</xsl:call-template>
</xsl:variable>
并使用以下命令访问此新数组:
<xsl:value-of select="$fields[1]"/>
但不起作用。
我该怎么办?
我想将一个XSLT 1.0变量作为数组,因为我想用它来读取它:
$newArray[1]
感谢。
答案 0 :(得分:3)
我不明白你为什么要定义一个需要标记化的变量,而不是将它定义为“标记化”开始。
在XSLT 1.0中,可以这样做:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="http://www.example.com/my"
exclude-result-prefixes="my">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<my:items>
<item>One</item>
<item>Two</item>
<item>Three</item>
<item>Four</item>
</my:items>
<!-- the rest of the stylesheet -->
</xsl:stylesheet>
有了这个,你可以这样做:
<xsl:value-of select="document('')/xsl:stylesheet/my:items/item[2]"/>
从样式表中的任意位置检索"Two"
。
当然,您可以将“数组”放入变量中:
<xsl:variable name="my-items" select="document('')/xsl:stylesheet/my:items/item" />
这样您就可以缩短对以下内容的引用:
<xsl:value-of select="$my-items[2]"/>