XPath 在两个 HTML 注释之间进行选择?

2024-02-05

我有一个很大的 HTML 页面。但我想使用 Xpath 选择某些节点:

<html>
 ........
<!-- begin content -->
 <div>some text</div>
 <div><p>Some more elements</p></div>
<!-- end content -->
.......
</html>

我可以在之后选择 HTML<!-- begin content --> using:

"//comment()[. = ' begin content ']/following::*" 

我也可以在之前选择 HTML<!-- end content --> using:

"//comment()[. = ' end content ']/preceding::*" 

但是我是否必须使用 XPath 来选择两条注释之间的所有 HTML?


我会查找第一个注释前面和第二个注释后面的元素:

doc.xpath("//*[preceding::comment()[. = ' begin content ']]
              [following::comment()[. = ' end content ']]")
#=> <div>some text</div>
#=> <div>
#=>   <p>Some more elements</p>
#=> </div>
#=> <p>Some more elements</p>

请注意,上面为您提供了each之间的元素。这意味着,如果您迭代每个返回的节点,您将得到一些重复的嵌套节点 - 例如“更多元素”。

我认为您实际上可能只想获取中间的顶级节点 - 即注释的兄弟节点。这可以使用以下方法完成preceding/following-sibling反而。

doc.xpath("//*[preceding-sibling::comment()[. = ' begin content ']]
              [following-sibling::comment()[. = ' end content ']]")
#=> <div>some text</div>
#=> <div>
#=>   <p>Some more elements</p>
#=> </div>

更新 - 包括评论

Using //*仅返回元素节点,不包括注释(和其他一些)。你可以改变* to node()归还一切。

puts doc.xpath("//node()[preceding-sibling::comment()[. = 'begin content']]
                        [following-sibling::comment()[. = 'end content']]")
#=> 
#=> <!--keywords1: first_keyword-->
#=> 
#=> <div>html</div>
#=> 

如果您只想要元素节点和注释(即不是所有内容),您可以使用self axis:

doc.xpath("//node()[self::* or self::comment()]
                   [preceding-sibling::comment()[. = 'begin content']]
                   [following-sibling::comment()[. = 'end content']]")
#~ #=> <!--keywords1: first_keyword-->
#~ #=> <div>html</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XPath 在两个 HTML 注释之间进行选择? 的相关文章

  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • Django - 提交具有同一字段多个输入的表单

    预警 我对 Django 以及一般的 Web 开发 非常陌生 我使用 Django 托管一个基于 Web 的 UI 该 UI 将从简短的调查中获取用户输入 通过我用 Python 开发的一些分析来提供输入 然后在 UI 中呈现这些分析的可视
  • 如何在html中制作多行类型的文本框?

  • 如何让div与包含td的高度相匹配?

    我沿着桌子的一排布置了三个 面板 一个比另外两个高 我希望所有三个面板都与最高的一个的高度相匹配 我尝试将 div 的样式设置为 height 100 但是即使包含的 tds 增长 短面板仍然很短 我的 HTML 是由 JSF 生成的 因此
  • 元素和 svg 形状之间的白线

    大家好 我正在使用由 shapedivider 生成的 svg 整形器 您可以看到 有一条白线 我不知道为什么它在那里以及如何删除它 请你帮助我好吗 有形状分隔符的代码 custom shape divider bottom 1640714
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外
  • 如何使用Python保存“完整的网页”而不仅仅是基本的html

    我正在使用以下代码来使用 Python 保存网页 import urllib import sys from bs4 import BeautifulSoup url http www vodafone de privat tarife r
  • 删除圆形图像周围的边框

    我有一个圆形图像 png 文件 中间是透明的 我需要将图像内的背景设置为纯色 为此 我将背景设为纯色 然后将border radius 50 但这会产生一条丑陋的小白线 有没有办法摆脱这个问题 或者我必须在图像编辑器中手动为图像着色 div
  • Angular JS 中的数组

    我是 Angular JS 新手 我正在将元素推送到数组中 然后想使用 ng repeat 在 html 中显示 scope groupedMedia Adding elements through a for loop scope gro
  • Javascript 使事件点击和语音识别与多个按钮一起工作

    所以我正在使用 webkitSpeechRecognition 并且它工作得很好 但问题是我想同时在多个地方使用它 当我将它添加到页面上的另一个部分时 它无法正常工作 这是它自己工作的情况 var final transcript var
  • HTML5 仅拖放图像

    我想做的是 如果所有拖动的文件都是图像 则将其删除 但如果有其他文件扩展名 则不要删除它们 而仅删除图像 这是我的尝试 HTML div div JavaScript var dropzone document getElementById
  • 如何在 Lift 框架中添加新页面

    如何在 lift 中的 webapp 目录中添加一个可供用户访问的新页面 目前只能通过index html访问http localhost 8080 com http localhost 8080 or http localhost 808
  • 如何在 Bootstrap 3 的导航栏中添加带有图标的搜索框?

    我正在使用新的 Twitter Bootstrap 3 并尝试放置一个像这样的搜索框 如下 在顶部导航栏中 在 Bootstrap 2 中 可以这样完成
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • 如何在 select 和 option 标签中添加 JSON 数据?

    我有这个html代码 div class searchfilter div class searchwrapper div div
  • 适用于移动设备的响应式订单确认电子邮件?

    我从未见过令人惊叹的订单确认 发票电子邮件 即使是最好的 html5 网站也会发送糟糕的订单确认电子邮件 有时是纯文本 我相信这是因为发票通常需要使用表格来显示购买的物品 这在移动设备上实现起来非常困难 我发现了一些让手机上的表格更易于管理
  • 将特定字形与网络字体一起使用

    使用网络字体 我想使用字体功能设置 CSS 中的选项以及跨度类HTML 中 以便使用字体集中的特定替代字形 我需要以正确的语法使用哪些值 GID Unicode 才能定位特定的目标glyph内glyph备择方案 这些功能使用 OpenTyp
  • 为 RoR 中的每个用户创建新的 URL 路径

    如何在 Ruby on Rails 中实时创建新的 URL 路径 例如 我希望我的用户拥有 name XXX com 或 XXX com name 仅供参考 我在 Heroku 上托管代码 看看 subdomain fu 插件 https
  • Ruby 中的 url_encode

    I read 的文档url encode http rdoc info stdlib erb 1 9 3 ERB Util 3Aurl encode 是否有一个表可以准确地告诉我哪个字符被编码为什么 使用url encode ERB s u

随机推荐

  • 用于关系可视化的javascript框架[重复]

    这个问题在这里已经有答案了 可能的重复 javascript 中的图形可视化代码 https stackoverflow com questions 7034 graph visualization code in javascript 我
  • 对象数组数组的 PHPStorm 代码提示

    在 PHPStorm 中 对象数组的代码提示既简单又很棒 class FooList public function construct this gt fooList new Foo 1 this gt fooList new Foo 2
  • PHP7 中的 Argon2i - 选择合适的选项

    我应该使用什么值来生成 Argon2i 哈希值以及如何找到我的硬件可以承受的适当设置 Namely memory cost time cost threads as options memory cost gt 1 lt lt 17 tim
  • JavaScript iFrame 限制

    我知道 出于安全原因 如果 iframe 属于不同的域 则 javascript 无法读取 iframe 的内容 这是有道理的 因为整个页面可能是一个 iframe 并且在框架之外具有监听脚本 问题是 在另一个方向上是否也有同样的限制 if
  • 选项“noEmit”不能与选项“incremental”一起指定

    我正在开发一个 next js 应用程序 它有以下内容tsconfig js compilerOptions target ES2018 module esnext lib dom es2018 es2019 array jsx prese
  • 如何在groovy中获取方法参数/参数的名称?

    我有一个 groovy 脚本 它有一个带有 2 个参数的函数 其中之一是哈希图 我想检查函数内部哈希图变量的名称是否包含子字符串 我该怎么做 def myfunc String var HashMap var2 need a routine
  • Eclipse:向 Maven 日志条目添加时间戳

    我正在使用 Eclipse Neon 1 并且我使用deployGoogle App Engine 插件的目标
  • 在 firebase 上进行电话身份验证时出错

    在 firebase 上进行电话号码身份验证时 我因此错误消息而崩溃 请帮忙 com russvkm chathut 是我的包名称 E AndroidRuntime FATAL EXCEPTION main Process com russ
  • PhpStorm 不与服务器同步

    问题是这样的 我的 phpStorm 项目使用通过 FTP 远程访问服务器 当我保存修改后的文件时 文件会正常上传到服务器 但是当我在服务器上创建文件夹时 我在 phpStorm 中看不到它 任何想法 PhpStorm 是围绕 本地项目文件
  • XACML 3.0 中的多重决策配置文件策略

    我需要为特定用户编写一个策略 它将返回如下 xacml 响应 该政策基于单用户 bob FirstName Create true Read true Update true Delete false MiddleName Create t
  • 这怎么可能:在 WaitOne 中处理 OnPaint

    我有一个ManualResetEvent 有一次 我使用等待该事件WaitOne 令我惊讶的是 我收到了一份OnPaint事件 而在WaitOne 这种情况也经常发生 堆栈跟踪如下所示 我明白了WaitOne会阻塞当前线程 并且在事件触发之
  • 如果Android中的应用程序被强制关闭,如何重置警报

    如果出现以下情况 我的应用程序使用 AlarmManager 设置的警报将被清除 用户在设置中强制关闭我的应用程序 一些任务杀手应用程序自动终止了我的应用程序进程 Android 本身杀死了我的应用程序 因为前端应用程序需要内存 请告诉我如
  • F# XML 多行文档,Visual Studio 2017

    我想添加一个多行 XML 文档 当我的鼠标悬停在它上面时 该文档将出现在 Intelli Sense 气泡中 参见示例 当我使用 Visual Studio 2015 时 以下代码可以工作 请参见下面的屏幕截图 但现在当我使用 Visual
  • 预加载组件

    在工作中 我们使用 DevExpress 作为用户界面 第一次打开使用 DevExpress 控件的表单时 会出现很长的暂停 在某些客户端上有时会出现 15 20 秒 在 Visual Studio 中 我可以看到该阶段正在加载大量程序集
  • CSS3可计算表达式?

    是否有任何技术允许在 css3 语句中使用表达式 通常 做以下事情是有帮助的 width 35 20px或类似的 目前 针对这些情况 我唯一的解决方案是重新设计页面或使用 javascript 动态设置 css CSS 关于值和单位的工作草
  • 调试类型初始值设定项中的异常

    我有一个静态类 没有静态构造函数 但有许多静态成员 第一次使用该类时 我抛出 TypeInitializationException 我正在打破 CLR 异常 并且已禁用 仅我的代码 问题是我只有在第一次使用这个类时才会得到这个异常 我不会
  • 如何在 ASP.NET MVC 5 中插入主从表

    I have Orders表和订单详细信息数据库中的表 通过 Entity Framework 6 我获得了一个模型 因此我可以从它生成类 我还从 Orders 表生成了控制器和视图 Orders folio PK date custome
  • ssl_transport_security.cc:599] 无法加载任何根证书

    我尝试使用 hyperledger composer fabric v0 19 0 创建自己的网络 网络构建似乎不错 但是当我执行composer network install 我收到这个错误 Composer Install Insta
  • 在 Spring 中使用 RestTemplate。异常 - 没有足够的变量可用于扩展

    我正在尝试访问 API 的内容 并且需要使用 RestTemplate 发送 URL String url1 http api example com Search key 52ddafbe3ee659bad97fcce7c53592916
  • XPath 在两个 HTML 注释之间进行选择?

    我有一个很大的 HTML 页面 但我想使用 Xpath 选择某些节点 div some text div div p Some more elements p div 我可以在之后选择 HTML using comment begin co