我在XSLT中声明了一个变量,如下所示:
<xsl:variable name="inline-array">
<Item>A</Item>
<Item>B</Item>
<Item>C</Item>
</xsl:variable>
我正在访问此变量,如下所示:
<xsl:param name="array"
select="document('')/*/xsl:variable[@name='inline-array']/*" />
<xsl:value-of select="$array[1]" />
只要我的内联数组具有静态内容,这就可以正常工作。但我的要求是将XSLT中的值动态分配给标签“Item”,即。类似的东西:
<xsl:variable name="inline-array">
<Item>$item1</Item>
<Item>$item2</Item>
<Item>$item3</Item>
</xsl:variable>
但是,我尝试了所有可能的选择而没有任何运气。任何建议将不胜感激。我们也欢迎任何其他选项来满足我的要求。谢谢。
答案 0 :(得分:3)
实现此目的的一种方法是使用扩展函数,即 node-set 函数,该函数从结果树片段返回一组节点。
首先,您需要为扩展函数定义名称空间,如此
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
在这种情况下,我使用的是Microsoft扩展功能,但根据您使用的平台,其他功能可用。 (http://exslt.org/common是非Microsoft平台的另一种常见方法)。
接下来,您可以像这样定义“数组”参数(或您想要的变量)。
<xsl:param name="array" select="msxsl:node-set($inline-array)"/>
最后,您可以像这样访问此数组
<xsl:value-of select="$array/Item[1]"/>
将这个完全放在一个简单的例子中就可以了解这个
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:output method="text" />
<xsl:variable name="inline-array">
<Item>
<xsl:value-of select="$Item1"/>
</Item>
<Item>
<xsl:value-of select="$Item2"/>
</Item>
<Item>
<xsl:value-of select="$Item3"/>
</Item>
</xsl:variable>
<xsl:param name="Item1">1</xsl:param>
<xsl:param name="Item2">2</xsl:param>
<xsl:param name="Item3">3</xsl:param>
<xsl:param name="array" select="msxsl:node-set($inline-array)"/>
<xsl:template match="/">
<xsl:value-of select="$array/Item[1]"/>
</xsl:template>
</xsl:stylesheet>
运行时,只会输出以下结果:
1
答案 1 :(得分:2)
首先,您是否坚持使用XSLT 1.0?如果只有您可以转移到XSLT 2.0,则很少需要使用文档('')访问样式表源代码等变通方法。
其次,我认为我们需要查看样式表的设计,如果没有您要解决的问题的描述,我们就无法真正做到这一点(与您尝试解决方案的做法不同。)