Mic*_*ker 0 arrays xslt xslt-1.0
我以前从未真正使用过XSLT,我正在寻找一些建议.
我从GSA框中以XML格式返回以下项目:
<MT N="searchCategories" V="Category 1"/>
<MT N="searchCategories" V="Category 2"/>
etc etc
Run Code Online (Sandbox Code Playgroud)
可以有任何数量的这些类别.
我只是想知道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"/>
Run Code Online (Sandbox Code Playgroud)
定义一个名为vTransfersvalue的变量,该变量是所有transfer元素的节点集,每个元素都是XML文档顶部元素的子元素.
然后:
$vTransfers[1]
Run Code Online (Sandbox Code Playgroud)
选择包含的第一个元素$vTransfers.
$vTransfers[2]
Run Code Online (Sandbox Code Playgroud)
选择包含在的第二个元素$vTransfers,...
$vTransfers[position() = $k]
Run Code Online (Sandbox Code Playgroud)
选择节点,$vTransfers其位置按文档顺序等于变量中包含的值$k.
此外,XPath 2.0支持 序列的概念.序列就像一个项目列表.项目可以是任何类型 - 不仅是节点.序列中的项目按照它们在序列中出现(定义)的方式排序.如果序列中的两个项目是节点,则它们的顺序仍然是序列中定义的顺序,这可能与它们的文档顺序不同.
示例:
<xsl:variable name="vNumList" as="xs:integer*" select="3, 5, 7"/>
Run Code Online (Sandbox Code Playgroud)
然后在这样引用时:
$vNumlist[2]
Run Code Online (Sandbox Code Playgroud)
生产:
5
Run Code Online (Sandbox Code Playgroud)
请记住:虽然这些合成构造类似于从数组中选择项目,但节点集和序列不是数组.特别是,它们通常缺少阵列对其元素的快速访问O(1).在节点集和序列的情况下,在随机位置访问项目的效率通常是O(N).这意味着当使用具有节点集或序列的类似数组的符号时,在使用数组时为O(N)的算法可以是O(N ^ 2).
| 归档时间: |
|
| 查看次数: |
11126 次 |
| 最近记录: |