使用 XSLT 处理类似数组的变量

发布于 2024-11-08 03:17:03 字数 733 浏览 1 评论 0原文

我已经在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝天 2024-11-15 03:17:04

首先,您是否被 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.)

铜锣湾横着走 2024-11-15 03:17:03

实现此目的的一种方法是使用扩展函数,即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

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

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt">

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.

<xsl:param name="array" select="msxsl:node-set($inline-array)"/>

Finally, you can then access this array like so

<xsl:value-of select="$array/Item[1]"/>

Putting this altogether in a simple example gives you this

<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>

When run, this simply outputs the following result:

1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文