如何使用 XPATH 找到两个 H3 之间的所有节点?

2024-04-20

如何使用 XPATH 找到两个 H3 之间的所有节点?


在 XPath 1.0 中,实现此目的的一种方法是使用 Kayessian 方法进行节点集交集:

$ns1[count(.|$ns2) = count($ns2)]

上面的表达式精确选择属于节点集的节点$ns1和节点集$ns2.

将此应用于具体问题-- 假设我们需要选择第二个和第三个之间的所有节点h3以下 XML 文档中的元素:

<html>
  <h3>Title T31</h3>
    <a31/>
    <b31/>
  <h3>Title T32</h3>
    <a32/>
    <b32/>
  <h3>Title T33</h3>
    <a33/>
    <b33/>
  <h3>Title T34</h3>
    <a34/>
    <b34/>
  <h3>Title T35</h3>
</html>

我们必须替代$ns1 with:

/*/h3[2]/following-sibling::node()

并替换$ns2 with:

/*/h3[3]/preceding-sibling::node()

因此,完整的 XPath 表达式是:

/*/h3[2]/following-sibling::node()
             [count(.|/*/h3[3]/preceding-sibling::node())
             =
              count(/*/h3[3]/preceding-sibling::node())
             ]

我们可以验证这是正确的 XPath 表达式:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select=
   "/*/h3[2]/following-sibling::node()
             [count(.|/*/h3[3]/preceding-sibling::node())
             =
              count(/*/h3[3]/preceding-sibling::node())
             ]
   "/>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于上面提供的 XML 文档时,就会生成所需的正确结果:

<a32/>

<b32/>

二. XPath 2.0 解决方案:

Use the intersect操作员:

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

如何使用 XPATH 找到两个 H3 之间的所有节点? 的相关文章

随机推荐

  • 简化平面数组或多维数组的循环

    通常 我会有一个数组来保存一组值 每个值我都需要处理 有时 数组仅保存单个集合 在这种情况下 每个值都需要经过该过程 其他时候 数组将保存许多集合 在这种情况下 每个值都将是一个数组 并且这些数组中的每个值都需要进行处理 这是一个例子 fo
  • 使用 MVVM 动态添加时给予 TabItem 焦点

    所有 我添加一个TabItem to a TabControl动态地使用 MVVM 新的TabItems加载良好 但我希望添加的选项卡自动获得焦点 也就是说 我添加了一个选项卡 但我不想必须单击该选项卡才能获得焦点 XAML 的TabCon
  • 如何将 CSS 样式仅应用于文本

    我正在尝试将样式应用于 HTML 文本之类的内容 我想要的基本上是 我得到的基本上是 正如您所看到的 第一行是缩进的 但其他行没有缩进 到目前为止 我已经将文本包含在 span 它嵌套在一个 div slide text text back
  • 作为 Windows 服务运行时,.Net Core 6 Worker Service 不写入日志

    我使用 C Net Core 6 Visual Studio 2022 创建了一个辅助服务 如果通过 Visual Studio 运行或直接从 Windows 资源管理器 PowerShell 启动 它会按预期写入日志文件 但是 当作为 W
  • 如何强制子进程刷新标准输出缓冲区?

    平台 Windows 8 1 IDE vs2013 使用c c 进程 A 使用管道重定向读取子进程的标准输出 但子进程不会在 printf 之后调用 fflush 以在子进程运行结束之前处理 A 无法从管道读取任何内容 ps 我有子进程的源
  • 具有可定制内容的 JSF 迭代复合组件

    我想创建一个复合组件 可以将迭代元素的实际布局传递给复合组件 这是一个简化的示例并且有效
  • 如何访问分区 Athena 表的子目录中的数据

    我有一个 Athena 表 每天都有一个分区 其中实际文件按小时位于 子目录 中 如下所示 s3 my bucket data 2019 06 27 00 00001 json s3 my bucket data 2019 06 27 00
  • python中字典列表中的top-k

    有没有一种简单的方法来执行此示例中的最大 k 个键 值对 s1 val 0 s2 val 10 s3 val 5 s4 val 4 s5 val 6 s6 val 7 s7 val 3 shapelets s1 s2 s3 s4 s5 s6
  • 如何通过光标url缩小图像的大小?

    我有一张尺寸为 105x105 的图像 我使用以下 CSS 脚本将其用作光标 class 1 child 1 cursor url theBell png 20 20 auto 当我将鼠标移到元素上时会出现图像 但它太大了 我不知道如何减小
  • 在 C# 中动态更改命名空间

    我想做这样的事情 如果定义了 DEBUG 则命名空间为 Test 或者命名空间为 TestB 请参阅下面的示例代码 我可以这样做吗 或者您有更好的想法来实现这一目标吗 提前致谢 if DEBUG SomekindofAttribute Na
  • 使用 Turbolinks 渲染同一页面时无法使用 Flash

    我试图在点击更新端点后显示闪存消息 我想让用户保持在同一页面上并告诉他信息已更新 我启用了 Turbolink 我的操作如下 def update form Form find params id if form update form p
  • “提供程序包”未正确加载

    VS 2013 专业版 版本 12 0 31101 00 更新 4 突然间 每当我尝试打开一个项目 MVC 项目或 Python 项目 时 我都会得到 ProviderPackage 包未正确加载 问题 可能是由配置更改或安装引起的 另一个
  • Vue 3 - 如何将组件和混入与根组件一起包含?

    我尝试将语法从 Vue 2 转换为 Vue 3 但我不确定如何包含mixins and 成分 如果您在 Vue 2 中看到以下代码 import App from App vue const app new Vue mixins globa
  • 模态内部的不同输出(Laravel 5.4)

    我的 trips blade php 中有这段代码 问题是当我的 t gt employees 位于模态之外时 我检索所有员工 但是当我将 t gt employees 放入模态中时 我只能检索 1 个数据 我无法找出这种情况下的任何错误
  • 如何清除ID未知的Interval?

    假设有人 邪恶 给我们设置了一个计时器setInterval 但我们不知道它的 ID 我们没有 setInterval 返回的对象的引用 也没有它的值 function setInterval function console log pw
  • Visual Studio:在“从程序集中添加工具箱项目”上停留了 11 个小时

    昨晚卸载并重新安装了 Visual Studio 2015 但安装并更新后 一旦我打开软件 它说 Adding toolbox items from assembly C Program Files x86 Microsoft SDK s
  • “ORA-01008:并非所有变量都绑定”错误

    我正在使用以下方法通过使用 jdbc 计算工资单 但 ORA 01008 并非所有变量都绑定 错误未删除 有什么想法吗 我正在使用以下代码 public double getPayroll ResultSet rs null ResultS
  • 如何将 CIPixellate Core Image Filter 添加到 Sprite Kit 场景?

    如何将 CIPixellate Core Image Filter 添加到 Sprite Kit 场景 我有一个 SpriteKit 场景 它是 SKScene 或其子类 我想向场景添加一个核心图像滤镜 特别是 CIPixellate 过滤
  • 对话框片段中的空指针

    我正在尝试从Class当给这个充气时Dialog Fragment但当Class有价值观 这对我来说很奇怪 也许我错过了一些东西 这是代码 对话片段 public class Dialog Fragment extends DialogFr
  • 如何使用 XPATH 找到两个 H3 之间的所有节点?

    如何使用 XPATH 找到两个 H3 之间的所有节点 在 XPath 1 0 中 实现此目的的一种方法是使用 Kayessian 方法进行节点集交集 ns1 count ns2 count ns2 上面的表达式精确选择属于节点集的节点 ns