Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays XSLT有数组的概念吗?_Arrays_Xslt_Xslt 1.0 - Fatal编程技术网

Arrays XSLT有数组的概念吗?

Arrays XSLT有数组的概念吗?,arrays,xslt,xslt-1.0,Arrays,Xslt,Xslt 1.0,我以前从未真正使用过XSLT,正在寻求一些建议 我从GSA框中以XML形式返回了以下项目: <MT N="searchCategories" V="Category 1"/> <MT N="searchCategories" V="Category 2"/> etc etc 这些类别可以有任意数量 我只是想知道XSLT是否有数组的概念 如果是: 如何将上面的所有节点枚举到一个数组中? 如何获得数组的长度? 如果没有: 有什么工作可以做吗? 我相信我正在使用XSLT版本1

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

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

<MT N="searchCategories" V="Category 1"/>
<MT N="searchCategories" V="Category 2"/>
etc etc
这些类别可以有任意数量

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

如果是:

如何将上面的所有节点枚举到一个数组中? 如何获得数组的长度? 如果没有:

有什么工作可以做吗?
我相信我正在使用XSLT版本1.0,XSLT2.0支持序列,序列在许多方面与数组相似。序列可以包含节点或原子值。原子值的示例有字符串、数字、日期等。XSLT1.0中的数据结构非常有限;您基本上只限于将事物建模为XML树


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

XSLT 2.0支持序列,序列在许多方面与数组类似。序列可以包含节点或原子值。原子值的示例有字符串、数字、日期等。XSLT1.0中的数据结构非常有限;您基本上只限于将事物建模为XML树


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

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

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

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

以下是一个例子:

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

选择$vTransfers…中包含的第二个元素

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

此外,XPath2.0支持序列的概念。序列就像一个项目列表。项目可以是任何类型,而不仅仅是节点。序列中的项目按其在序列中定义的显示方式排序。如果序列中的两个项目是节点,则它们的顺序仍然是序列中定义的顺序,这可能不同于它们的文档顺序

例如:

产生:

5

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

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

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

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

以下是一个例子:

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

选择$vTransfers…中包含的第二个元素

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

此外,XPath2.0支持序列的概念。序列就像一个项目列表。项目可以是任何类型,而不仅仅是节点。序列中的项目按其在序列中定义的显示方式排序。如果序列中的两个项目是节点,则它们的顺序仍然是序列中定义的顺序,这可能不同于它们的文档顺序

例如:

产生:

5

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

XPath 3.1和XSLT 3.0将数组作为新的数据类型引入:

XPath 3.1和XSLT 3.0将数组作为新的数据类型引入:

XSLT没有数组。你需要什么?我需要列举价值观,
并且基于某些条件,用它们构建面包屑。XSLT没有数组。你的需求是什么?我需要列举这些值,并根据某些条件,从中构建一个面包屑。+1:你的答案包含了对XSLT的如此热爱,这太神奇了:-@LukasEder:不客气-不要告诉我妻子这个…:+1:你的回答中包含了对XSLT的如此热爱,这是令人惊讶的:-@LukasEder:不客气-不要告诉我妻子这个…:
<xsl:variable name="vNumList" as="xs:integer*" select="3, 5, 7"/>
$vNumlist[2]
5