如何连接两个节点集以尊重顺序?

2023-12-22

我的理解是,尽管 XSLT 的“节点集”被称为“集”,但它们实际上是节点的有序列表(这就是每个节点与索引关联的原因)。因此我一直在尝试使用“|”运算符连接节点集,以便尊重节点的顺序。

我试图完成的任务类似于以下 JavaScript 代码:

[o1,o2,o3].concat([o4,o5,o6])

其产量:

[o1,o2,o3,o4,o5,o6]

但是,请考虑以下简化示例:

测试扁平化.xsl

<?xml version="1.0"?>
<xsl:stylesheet 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 version="1.0">
 <xsl:output method="xml"/>

 <xsl:template match="/">

  <xsl:variable name="parentTransition" select="//*[@id='parentTransition']"/>
  <xsl:variable name="childTransition" select="//*[@id='childTransition']"/>
  <xsl:variable name="parentThenChildTransitions" select="$parentTransition | $childTransition"/>
  <xsl:variable name="childThenParentTransitions" select="$childTransition | $parentTransition"/>

  <return>
   <parentThenChildTransitions>
    <xsl:copy-of select="$parentThenChildTransitions"/>
   </parentThenChildTransitions>
   <childThenParentTransitions>
    <xsl:copy-of select="$childThenParentTransitions"/>
   </childThenParentTransitions>
  </return>

 </xsl:template>

</xsl:stylesheet>

给定以下输入:

<?xml version="1.0"?>
<root>
        <element id="parentTransition"/>

 <element id="childTransition"/>
</root>

其结果(使用 xsltproc):

<?xml version="1.0"?>
<return>
    <parentThenChildTransitions>
        <element id="parentTransition"/><element id="childTransition"/>
    </parentThenChildTransitions>
    <childThenParentTransitions>
        <element id="parentTransition"/><element id="childTransition"/>
    </childThenParentTransitions>
</return>

所以“|”运算符实际上不尊重节点集操作数的顺序。有没有一种方法可以连接节点集以尊重顺序?


这实际上不是一个 XSLT 问题,而是一个 XPath 问题。

在 XPath 1.0 中,没有任何类似于“列表”数据类型的东西。节点集是一个集合,它没有顺序。

在 XPath 2.0 中有sequence数据类型。序列中的任何项目都是有序的。这与文档顺序无关。此外,相同的项目(或节点)可以在序列中出现多次。

因此,在 XSLT 2.0 中,只需使用 XPath 2.0 序列连接运算符,:

//*[@id='parentTransition'] , //*[@id='childTransition']

其计算结果为文档中所有元素的顺序id属性'parentTransition'后跟文档中的所有元素id属性'childTransition'

在 XSLT 中,仍然可以访问和处理不按文档顺序的节点:例如使用<xsl:sort>指令 - 然而,作为结果处理的节点集<xsl:apply-templates> or <xsl:for-each> is a node-list-- 不是节点集。

评估不按文档顺序的节点的另一个示例 is the position()内的功能<xsl:apply-templates> or <xsl:for-each>有一个<xsl:sort>子级或在(XPath 表达式的)位置步骤的谓词内,其中使用了反向轴(例如ancesstor:: or preceeding::)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何连接两个节点集以尊重顺序? 的相关文章

随机推荐

  • 将 numpy 数组转换为矩阵 rpy2、Kmeans

    我有一个 numpy 2D 数组 self sub 我想在 rpy2 kmeans 中使用它 k robjects r kmeans self sub 2 20 我总是收到以下错误 valueError 目前无法对该类型执行任何操作 我能做
  • 交换 numpy 数组中的列?

    from numpy import def swap columns my array col1 col2 temp my array col1 my array col1 my array col2 my array col2 temp
  • xml文件中的DOCTYPE是什么意思?

    在 hibernate 中我们使用配置和映射 xml 文件 在 xml 中 第一行是版本 然后我们指定 DOCTYPE DTD 行 例子 有人可以解释一下这是什么意思吗 我知道 DTD 是文档类型定义 就像定义 xml 语法一样 我想知道这
  • 故事板崩溃 - 编码兼容的关键 sceneViewController

    我在 iOS 5 中使用 Storyboard 时遇到间歇性崩溃 时常 当我尝试使用 Storyboard 中的视图控制器实例化新对象时 我会收到 SIGABRT 这似乎是一个非常普遍的错误 但我找不到其他人看到过这个错误 感谢您的帮助 S
  • 为什么process.memoryUsage()不输出节点进程消耗的内存

    在node js应用程序中 我使用代码 console log process memoryUsage 记录内存使用情况 输出如下 rss 13664256 heapTotal 6131200 heapUsed 3396912 当我使用进程
  • 如何按月分组(包括所有月份)?

    我按月份对表格进行分组 SELECT TO CHAR created YYYY MM AS operation COUNT id FROM user info WHERE created IS NOT NULL GROUP BY ROLLU
  • TFS 2015 版本管理访问构建变量

    在 TFS 2015 中 我们有一个构建 它将自动触发新版本 这是通过新实现的基于脚本的构建定义 https www visualstudio com docs build overview 现在我想将用户变量从构建传递到发布 我在构建中创
  • 更改ggplot地图R Studio中图例中的文本

    我正在尝试创建一张充满流感疾病热度的美国地图 我有两个问题 我无法更改图例中的变量文本 图例的顺序是错误的 1 gt 10 gt 2 gt 这是代码 library maps library ggplot2 Get all states d
  • 嵌套对象和数组解构

    我正在尝试使用解构将对象转换为更精简的版本 我的对象包括一个嵌套数组 其中也包含对象 我只想要这个数组中的几个字段 我可以很好地进行嵌套对象解构 并且可以很好地进行数组解构 但不能一起进行 我当前的尝试如下所示 var data title
  • jsx 表忽略换行符

    我正在尝试创建一个包含多行字符串的表 但我的表未正确设置该字符串的格式 这是 jsx td arr join n td 这是相应的 html td Line 1 Line 2 Line 3 Line 4 td 但在浏览器中它看起来像 发生了
  • 删除 Swagger UI 上的架构 - 续

    我已经关注了置顶文章 Net Core 3 1 删除 Swagger UI 上的架构 https stackoverflow com questions 62858580 net core 3 1 remove schema on swag
  • 两个进程写入一个文件,防止混合输出

    我想从两个进程获取输出并将它们合并到一个文件中 例如 proc1 gt gt output proc2 gt gt output 问题是最终文件中的输出可能会混淆 例如 如果第一个进程写入 hellow 第二个进程写道 bye 结果可能是这
  • 将 jquery 代码应用于多个文本区域

    我有一些代码可以工作 但有很多重复 http jsfiddle net 6Wp2j 25 http jsfiddle net 6Wp2j 25 input apple on keyup function div apple html thi
  • 如何以编程方式清除 Microsoft Edge 浏览器缓存?

    有谁知道如何以编程方式清除 Microsoft Edge 的缓存 Net 脚本 命令行 删除文件 上面给出的位置我认为是错误的 下面是 cookie 历史记录和缓存的位置 目录 C Users 用户名 AppData Local Micro
  • asp.net mvc 页面不显示关联对象的属性

    我有以下简单的结构 申请人 位置 申请人职位 和申请人职位历史 第三类有一份申请人推荐信和一份职位推荐信 第 4 个表有一个与 ApplicantPosition 相关的参考 在 razon 页面中 我正在显示每个职位申请人的历史记录 例如
  • 从IP地址获取子网掩码和网关

    我该如何计算subnet mask and gateway从一个IP address 假设我的 IP 地址是180 12 24 68 那么如何计算这个IP的子网掩码和网关呢 您无法计算您的子网掩码or仅来自 IP 地址的网关 您可以在给定
  • 在网络服务器上管理多个.Net框架

    因此 我负责在生产服务器上部署我的项目 其中还设置了一些其他 ASP NET 网站 现在的问题是 我在 NET 3 5 下编写了整个项目 但在网络服务器上当前安装是 NET 1 1 因为其他一些项目需要它们 不要问我为什么 我也无法弄清楚
  • 将列表列表拆入 pandas 数据框[重复]

    这个问题在这里已经有答案了 假设我有以下数据框 x pd DataFrame a x y x t x r y t b 1 0 1 a b 0 x y 1 1 x t x r 0 2 y t 1 我想去 letter num 0 x 1 1
  • Python 中的 __del__() 方法有什么用?

    From Python 文档 https docs python org 3 reference datamodel html highlight del object del 不保证 del 为解释器退出时仍然存在的对象调用方法 据我了解
  • 如何连接两个节点集以尊重顺序?

    我的理解是 尽管 XSLT 的 节点集 被称为 集 但它们实际上是节点的有序列表 这就是每个节点与索引关联的原因 因此我一直在尝试使用 运算符连接节点集 以便尊重节点的顺序 我试图完成的任务类似于以下 JavaScript 代码 o1 o2