我试图访问数组中的特定元素,具体取决于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)
提前致谢。
答案 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>
。