XSLT 是否有数组的任何概念



我以前从未真正使用过XSLT,正在寻找一些建议。

我从 GSA 框中以 XML 格式返回了以下项目:

<MT N="searchCategories" V="Category 1"/>
<MT N="searchCategories" V="Category 2"/>
etc etc

这些类别可以有任何数量。

我只是想知道 XSLT 是否有数组的概念?

㞖:

  • 如何将上面的所有节点枚举到一个数组中?
  • 如何获取数组的长度?

如果没有:

  • 有什么解决方法吗?

我相信我正在使用 XSLT 版本 1.0

正如 @Michael Kay 所解释的,XPath 1.0 和 XPath 2.0 都不支持 XPath 数据模型 (XDM( 的数组数据结构。

但是,可以使用类似数组的语法,如下所示:

在 XPath 1.0/2.0 中,可以定义一个变量来包含一组特定的节点,这些节点可以通过它们的位置(按文档顺序(访问,并在谓词中指定此位置。

下面是一个示例

<xsl:variable name="vTransfers" select="/*/transfer"/>

定义一个名为 vTransfers 的变量,其值是所有 transfer 个元素的节点集,每个元素都是 XML 文档顶部元素的子元素。

然后

$vTransfers[1]

选择包含在 $vTransfers 中的第一个元素。

$vTransfers[2]

选择包含在 $vTransfers 中的第二个元素,...

$vTransfers[position() = $k]

$vTransfers中选择其位置(按文档顺序(等于变量 $k 中包含的值的节点。

此外,XPath 2.0 还支持序列的概念。序列类似于项目列表。项目可以是任何类型的 - 不仅仅是节点。序列中的项按它们在序列中的显示(定义(方式进行排序。如果序列中的两个项目是节点,则它们的顺序仍然是序列中定义的顺序,这可能与它们的文档顺序不同。

示例

<xsl:variable name="vNumList" as="xs:integer*" select="3, 5, 7"/>

然后当像这样引用时:

$vNumlist[2]

生产:

5

请记住:尽管这些合成结构类似于从数组中选择项目,但节点集和序列不是数组。特别是,它们通常缺乏数组对其元素的非常快速的访问 O(1(。在节点集和序列的情况下,在随机位置访问项目的效率通常为 O(N(。这意味着使用数组时为 O(N( 的算法,在使用节点集或序列的类似数组的符号时可能是 O(N^2(。

XSLT 2.0 支持序列,这些序列在许多方面与数组相似。序列可以包含节点或原子值(原子值的示例包括字符串、数字、日期等(。XSLT 1.0 中的数据结构受到更多限制;您基本上仅限于将事物建模为 XML 树。

但是,您问错了问题。鉴于您对语言的有限经验,最好描述您希望程序为给定输入生成的输出,并就如何进行转换寻求建议。

XPath 3.1 和 XSLT 3.0 引入了数组作为新的数据类型 https://www.w3.org/TR/xslt-30/#arrays:

相关内容

  • 没有找到相关文章

最新更新