XPath 获取两个标题之间的标记

2023-12-11

我正在尝试编写一个小应用程序来从维基百科页面中提取内容。当我第一次想到是否可以时,我认为我可以只使用 XPath 来定位包含内容的 div,但在研究了 Wikipedia 如何构建他们的文章后,我很快发现这并不是那么容易。当我获取页面时分离内容的最佳方法是选择两组之间的内容h2 tags.

例子:<h2>Title</h2> <div>Some Content</div> <h2>Title</h2>

在这里我想得到div标题集之间。我尝试用 XPath 来做这件事,但一点运气都没有。我将更多地研究 XPath,因为我认为这是我需要用来实现我想要的东西,但在我深入研究它之前,我想听听你们对此的看法。 XPath 是正确的方法还是有其他更简单的选择?如果这有什么区别的话,我用 C# 编写应用程序。


是的,您使用 XPath 的方向是正确的——它非常适合选择 XML 文档的某些部分。

例如,对于此 XML,

<r>
   <h2>Title A</h2>
   <div>Some Content</div>
   <div>More Content</div>
   <h2>Title B</h2>
</r>

这个 XPath,

//div[preceding-sibling::h2 = 'Title A' and following-sibling::h2 = 'Title B']

将选择此内容,

<div>Some Content</div>
<div>More Content</div>

两者之间h2标题,按要求。


更新以解决OP的自我回答:

对于这个新的 XML 示例,

<div>
    <h2><span>Summary</span></h2>
    <p>Paragraph</p>
    <ul>
        <li>List1</li>
        <li>List2</li>
        <li>List3</li>
    </ul>
    <p>Paragraph</p>

    <h2><span>Location</span></h2>
    <p>Paragraph</p>
</div>

我上面提供的 XPath 可以很容易地进行调整,

//*[preceding-sibling::h2 = 'Summary' and following-sibling::h2 = 'Location']

选择此 XML,

<p>Paragraph</p>  
<ul>
   <li>List1</li>
   <li>List2</li>
   <li>List3</li>
</ul>    
<p>Paragraph</p>

按照要求。

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

XPath 获取两个标题之间的标记 的相关文章

随机推荐

  • MySQL 5.6 中 json_extract 不可用时,如何从 JSON 字段中进行选择?

    如果我的行有一个varchar具有以下值 1 2 3 如果我需要该值包含其中一个数字 2 或 3 我该如何选择整行 正如你所说 你使用的是 MySQL 5 6 所以JSON EXTRACT 功能不可用 我推荐的唯一选择是 升级到 MySQL
  • 如何查看包含 git 暂存更改的文件

    git diff staged 允许您查看 HEAD 和暂存更改之间的更改 如果我要提交暂存的更改 如何查看 HEAD 中存在的完整文件 如何查看其中的特定行子集 您可以使用以下命令查看文件的暂存版本 git cat file p FILE
  • 当我重写 equals() 方法时,为什么要重写 hashCode() ?

    好的 我从很多地方和来源听说 每当我重写 equals 方法时 我也需要重写 hashCode 方法 但考虑下面的代码 package test public class MyCustomObject int intVal1 int int
  • 如何在 matplotlib pandas 中将两个文件的两个条形图合并到一个图表中

    我有两个具有相同列但内容不同的数据框 我已经策划了dffinal data frame 现在我想绘制另一个数据框dffinal no在同一张图上进行比较 例如其中的一个条形图blue colour 以及具有另一种颜色的相同条形图differ
  • Viewpager、光标和片段

    我是 viewpager 的新手 想知道是否有人可以向我指出使用带有片段和数据库的 viewpager 的项目的教程或源代码 我看过 PagerAdapter 的示例 但我只是不明白它们是如何一起工作的 光标 片段和 PagerAdapte
  • 为什么 next 会引发 'StopIteration',但 'for' 会正常返回?

    在这段代码中 为什么使用for结果没有StopIteration或者是for循环捕获所有异常然后默默退出 在这种情况下 为什么我们会有无关的return 或者是raise StopIteration造成的 return None usr b
  • >>> 运算符是什么? [复制]

    这个问题在这里已经有答案了 In filter我在 Mozilla 网站上看到了文档页面 gt gt gt 操作员 var t Object this len t length gt gt gt 0 here res thisp i val
  • 0x8($rsp) 的含义

    我第一次学习汇编语言 这是 gdb 反汇编的一部分 mov 0x131 eax cmp 0x8 rsp eax Question here what is the value of 0x8 rsp gdb i r rax 0x131 305
  • Play框架-简单表达式的非法开始

    我正在尝试实现一个过滤功能 该功能将按业务类型显示业务 这是 搜索表单 用户可以在其中选择他们想要显示的业务类型 businessList List Business formSearch Form Business import help
  • SQL Server 关系隐藏在存储过程而不是模式中

    目前 我们几乎没有引用完整性 并且拥有许多自连接的表 实际上 最好将其表示为单独的表或连接的视图 这些表如何相互关联的知识隐含在存储过程的逻辑中 而不是显式地存在于架构中 我们正在考虑改变这一点 第一步是真正理解隐含的关系并记录它们 所以我
  • 在递增号码上添加静态前缀

    我在表单上创建了一个名为trackingcode每次插入新数据时它都会增加 现在我考虑添加前缀 然后添加数字 所以我所做的是 Newtracking mysqli fetch assoc trackingQuery REQ maxtrack
  • 闪亮的 UI:保存输入中的更改

    我有一个很大的问题 我正在尝试运行一个具有很多不同设置的程序 这些设置可以在用户界面中设置 就我而言 用户可能需要多次使用相同的设置运行程序 我的问题是 如果刷新或重新启动用户界面 所有内容都会设置为默认值 例如 numericInput
  • 如何实现二维向量数组?

    我是第一次使用STL库中的向量类 我应该如何添加到向量数组的特定行 struct x vector
  • 修改终端中的文本

    是否可以在不清除屏幕的情况下修改我打印到终端的文本 例如 如果我以百分比显示某项进度 我可以修改该百分比而无需清除屏幕并再次打印吗 我正在寻找一种跨平台的方式 如果有的话 谈论C thanks 有多种方法可以做到这一点 并且根据您想要投入多
  • 创建 Func 以返回引用类型和值类型

    我有一个方法返回一个Func由如下表达式构建 var expr Expression Property Expressions Expression Constant new Foo Name Hans Age 3 typeof Foo A
  • C++ __COUNTER__ 定义

    我的计算机上安装了两个版本的 C 编译器 其中一位认识到 COUNTER 宏而另一个则没有 在做了一些研究以使程序在两者中编译之后 我还没有遇到宏定义 COUNTER 这是编译器完成的一些特殊宏还是我可以复制其定义 COUNTER 进入我的
  • 访问 JavaScript 对象变量属性 [重复]

    这个问题在这里已经有答案了 可能的重复 如何从 JavaScript 中的变量值创建对象属性 如何访问像这样存储在变量中的属性名称 var obj obj foo bar var propName foo I want something
  • 在等待结果时禁用 HTML 按钮

    当我单击 HTML 表单上的提交按钮时 将调用与该按钮相关的函数并执行其工作 完成工作后会发送邮件通知 这会耗费太多时间 之后 确认消息将显示在同一 HTML 页面上 不使用 Ajax 即刷新页面 我想避免让用户在发送邮件的等待期间混乱地多
  • 部署到 Google 计算引擎失败:检索 App Engine 服务帐户时出错

    After 我删除了一些值 不记得是哪个 在我的项目配置中 在开发者控制台 我无法将应用程序部署到计算引擎实例 我已经使用相同的配置成功部署了相同的代码数十次 但在删除开发人员控制台中的一些值或进行了一些我认为较小的其他调整后 使用 Mav
  • XPath 获取两个标题之间的标记

    我正在尝试编写一个小应用程序来从维基百科页面中提取内容 当我第一次想到是否可以时 我认为我可以只使用 XPath 来定位包含内容的 div 但在研究了 Wikipedia 如何构建他们的文章后 我很快发现这并不是那么容易 当我获取页面时分离