使用 XSLT 处理类似数组的变量
我已经在 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>
但是,我尝试了所有可能的选择,但没有任何运气。任何建议将不胜感激。也欢迎任何其他选项来满足我的要求。谢谢。
I have declared a variable in my XSLT as given below :
<xsl:variable name="inline-array">
<Item>A</Item>
<Item>B</Item>
<Item>C</Item>
</xsl:variable>
I am accessing this variable as given below :
<xsl:param name="array"
select="document('')/*/xsl:variable[@name='inline-array']/*" />
<xsl:value-of select="$array[1]" />
This is working fine as long as my inline array has static contents. But my requirement is to dynamically assign values in the XSLT to the tag "Item" ie. Something like :
<xsl:variable name="inline-array">
<Item>$item1</Item>
<Item>$item2</Item>
<Item>$item3</Item>
</xsl:variable>
But, I tried all possible options without any luck. Any suggestions will be greatly appreciated. Any other options to fulfill my requirement is also welcome. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,您是否被 XSLT 1.0 困住了?如果您可以迁移到 XSLT 2.0,则很少需要使用 document('') 访问样式表源代码之类的解决方法。
其次,我认为我们需要查看样式表的设计,如果没有对您试图解决的问题的描述(与您尝试解决方案不同),我们就无法真正做到这一点。
Firstly, are you stuck with XSLT 1.0? Workarounds like accessing the stylesheet source code using document('') are very rarely needed if only you can move to XSLT 2.0.
Secondly, I think we need to look at the design of the stylesheet, and we can't really do that without a description of the problem you are trying to solve (as distinct from your attempts at a solution.)
实现此目的的一种方法是使用扩展函数,即node-set函数,它从结果树片段返回一组节点。
首先,您需要为扩展函数定义命名空间,如下所示。
在本例中,我使用的是 Microsoft 扩展函数,但其他扩展函数也可用,具体取决于您使用的平台。 (http://exslt.org/common 是非 Microsoft 平台的另一种常见方法)。
接下来,您定义“数组”参数(或您想要的变量),如下所示。
最后,您可以像这样访问这个数组
将其放在一个简单的示例中
,这样您就可以在运行时简单地输出以下结果:
1
One way to achieve this is to make use of an extension function, namely the node-set function, which returns a set of nodes from a result tree fragment.
First you would need to define the namespace for the extension functions like so
In this case, I am using the Microsoft extension functions, but others are available depending on which platform you are using. (http://exslt.org/common is another common one for non-Microsoft platforms).
Next, you define your "array" parameter (or variable, you wanted), like so.
Finally, you can then access this array like so
Putting this altogether in a simple example gives you this
When run, this simply outputs the following result:
1