数组在XSLT中的变量索引

时间:2016-05-31 12:11:31

标签: arrays xml xslt xslt-2.0

我试图访问数组中的特定元素,具体取决于XML文件中当前日期的值。

例如,在XML

<CurrentMonth>5</CurrentMonth>

然后,在XSLT中 - 将其设置为变量

  <xsl:variable name="current-month">
       xsl:value-of select="//CurrentMonth" />
  </xsl:variable>

我还宣布了一个&#34;月名的数组&#34;如

<xsl:variable name="array" as="element()*">
    <Item>Jan</Item>
    <Item>Feb</Item>
    <Item>Mar</Item>
    <Item>Apr</Item>
    <Item>May</Item>
    <Item>Jun</Item>
    <Item>Jul</Item>
    <Item>Aug</Item>
    <Item>Sept</Item>
    <Item>Oct</Item>
    <Item>Nov</Item>
    <Item>Dec</Item>
</xsl:variable>

在XSLT中是否可以通过使用变量作为数组的索引来返回月份的名称(例如&#34; Jan&#34;)?

示例:

<xsl:value-of select="$array[$current-month]">

上面的代码抛弃了我

[FATAL]: Error checking type of the expression 'filter-expr(variable-ref(array/result-tree)

提前致谢。

2 个答案:

答案 0 :(得分:2)

您有几个语法错误:

<xsl:variable name="current-month">
   xsl:value-of select="//CurrentMonth" />
</xsl:variable>

需要:

<xsl:variable name="current-month">
   <xsl:value-of select="//CurrentMonth" />
</xsl:variable>

或者最好:

<xsl:variable name="current-month" select="//CurrentMonth" />

接下来你有:

<xsl:value-of select="$array[$current-month]">

需要关闭:

<xsl:value-of select="$array[$current-month]"/>

并且,如果您使用定义变量的第一种形式,则需要:

<xsl:value-of select="$array[number($current-month)]">

答案 1 :(得分:1)

将变量定义为<xsl:variable name="current-month" select="xs:integer(//CurrentMonth)"/>,然后您可以使用$array[$current-month](尽管您索引序列而不是数组)。使用您的代码,您需要$array[position() = $current-month]

一个最小但完整的样式表,对我来说可以使用Saxon 9.6.0.7 HE

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:variable name="array" as="element()*">
        <Item>Jan</Item>
        <Item>Feb</Item>
        <Item>Mar</Item>
        <Item>Apr</Item>
        <Item>May</Item>
        <Item>Jun</Item>
        <Item>Jul</Item>
        <Item>Aug</Item>
        <Item>Sept</Item>
        <Item>Oct</Item>
        <Item>Nov</Item>
        <Item>Dec</Item>
    </xsl:variable>

    <xsl:variable name="current-month" select="xs:integer(//CurrentMonth)"/>

    <xsl:template match="/">
        <xsl:value-of select="$array[$current-month]"/>
    </xsl:template>

</xsl:stylesheet>
当针对输入May运行时

并输出<CurrentMonth>5</CurrentMonth>