Arrays XSLT有数组的概念吗?
我以前从未真正使用过XSLT,正在寻求一些建议 我从GSA框中以XML形式返回了以下项目: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
<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