正如 @Michael Kay 所解释的,XPath 1.0 和 XPath 2.0 的 XPath 数据模型 (XDM) 都不支持数组数据结构。
但是,可以使用类似数组的语法,如下所示:
在 XPath 1.0/2.0 中,可以定义一个变量来包含一组特定的节点并且可以通过它们的位置(按文档顺序)访问它们,并在谓词中指定该位置。
这是一个例子:
<xsl:variable name="vTransfers" select="/*/transfer"/>
定义了一个名为的变量vTransfers
值为所有的节点集transfer
每个元素都是 XML 文档顶部元素的子元素。
Then:
$vTransfers[1]
选择包含在的第一个元素$vTransfers
.
$vTransfers[2]
选择包含在的第二个元素$vTransfers
, ...
$vTransfers[position() = $k]
从中选择节点$vTransfers
按文档顺序,其位置等于变量中包含的值$k
.
此外,XPath 2.0 支持以下概念: 序列。序列就像一个项目列表。项目可以是任何类型——不仅仅是节点。序列中的项目按照它们在序列中出现(定义)的方式排序。如果序列中的两个项目是节点,则它们的顺序仍然是序列中定义的顺序,这可能与它们的文档顺序不同。
Example:
<xsl:variable name="vNumList" as="xs:integer*" select="3, 5, 7"/>
然后当像这样引用时:
$vNumlist[2]
产生:
5
Remember:虽然这些合成结构类似于从数组中选择一个项目,但节点集和序列是not数组。特别是,它们通常缺乏数组对其元素的快速访问 O(1)。在节点集和序列的情况下,访问随机位置的项目的效率通常为 O(N)。这意味着使用数组时为 O(N) 的算法,在使用具有节点集或序列的类似数组表示法时可能为 O(N^2)。