XSLT 1.0:字符串到数组变量

时间:2015-11-13 16:27:01

标签: xslt xslt-1.0

我有一个变量如下:

<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) &gt; 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]

感谢。

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]"/>