从标签中提取 HTML5 数据属性

2024-05-24

我想从标签中提取所有 HTML5 数据属性,就像这个 jQuery 插件 http://www.orangesoda.net/jquery.dataset.html.

例如,给定:

<span data-age="50" data-location="London" class="highlight">Joe Bloggs</span>

我想得到一个像这样的哈希值:

{ 'data-age' => '50', 'data-location' => 'London' }

我最初希望使用通配符作为我的 CSS 选择器的一部分,例如

Nokogiri(html).css('span[@data-*]').size

但似乎不支持。


选项 1:获取所有数据元素

如果您需要的只是列出页面的所有数据元素,那么这里有一行:

Hash[doc.xpath("//span/@*[starts-with(name(), 'data-')]").map{|e| [e.name,e.value]}]

Output:

{"data-age"=>"50", "data-location"=>"London"}

选项 2:按标签对结果进行分组

如果您想按标签对结果进行分组(也许您需要对每个标签进行额外的处理),您可以执行以下操作:

tags = []
datasets = "@*[starts-with(name(), 'data-')]"

#If you want any element, replace "span" with "*"
doc.xpath("//span[#{datasets}]").each do |tag|
    tags << Hash[tag.xpath(datasets).map{|a| [a.name,a.value]}]
end

Then tags是一个包含键值哈希对的数组,按标签分组。

选项 3:类似于 jQuery 数据集插件的行为

如果您更喜欢类似插件的方法,下面将为您提供dataset每个 Nokogiri 节点上的方法。

module Nokogiri
  module XML
    class Node
      def dataset
        Hash[self.xpath("@*[starts-with(name(), 'data-')]").map{|a| [a.name,a.value]}]
      end
    end
  end
end

然后您可以找到单个元素的数据集:

doc.at_css("span").dataset

或者获取一组元素的数据集:

doc.css("span").map(&:dataset)

Example:

以下是该人的行为dataset方法同上。给定 HTML 中的以下几行:

<span data-age="50" data-location="London" class="highlight">Joe Bloggs</span>
<span data-age="40" data-location="Oxford" class="highlight">Jim Foggs</span>

输出将是:

[
 {"data-location"=>"London", "data-age"=>"50"},
 {"data-location"=>"Oxford", "data-age"=>"40"}
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从标签中提取 HTML5 数据属性 的相关文章

随机推荐

  • 敏捷与迭代和增量开发之间的区别[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 敏捷开发与迭代增量开发有什么区别 敏捷是否被视为迭代和增量 一些信息表明敏捷是最新的迭代和增量 我需要对此做出明确的澄清 迭代 你不可能一次性完
  • 在非 WordPress php 页面之外显示 WordPress 帖子

    我需要在非 WordPress php 页面中显示 WordPress 博客文章 我已经尝试过以下代码
  • 计算连续有多少次和的结果为正(或负)

    第一部分 我有一个包含财务数据的数据框 33023 行 这里是指向 数据 https mab to Ssy3TelRs https mab to Ssy3TelRs df open 是标题的价格 df close 是收盘价 我一直想看看标题
  • 为什么我的 Dockerfile CMD 不起作用?

    所以在我的 Dockerfile 的末尾我有这样的内容 WORKDIR home CMD django admin startproject whattt CMD bin bash 当我创建映像然后运行容器时 一切都按预期运行 没有错误 D
  • 按值或 ID 选择更多复选框

    我有这段代码 我想在其中创建一个切换按钮来选择 2 个或更多复选框 例如 意大利和德国 我正在尝试这段代码 但我无法让它工作 document on click checkbox button function e var checks i
  • 递归树遍历 - 如何跟踪递归级别?

    我基本上试图从表示树结构的多维数组构建 html ul li 嵌套列表 下面的代码工作正常 但我想改进它 我需要一种方法来跟踪递归级别 以便我可以将不同的类应用于不同的级别 向生成的输出添加缩进等 function buildTree tr
  • Android Studio 使用的默认 Android SDK 路径是什么?

    使用Android Studio下载Android SDK时 默认下载路径是什么 我有兴趣了解 Linux Mac 和 Windows 的路径 在网上搜索了一下 好像是这样的 Linux Android Sdk Mac Library An
  • C++ 中的转换错误

    有人可以帮我解决这个错误吗 我是 C 新手 看来错误就发生在一堆宏中 我能做什么来解决它 或者我怎样才能追踪到它的源头 我真的不明白这个错误 这是否意味着编译器尝试转换该方法void ReadCPUparameter to a LRESUL
  • 调用函数值[重复]

    这个问题在这里已经有答案了 可能的重复 函数提前触发 https stackoverflow com questions 12201816 function triggering early 我已经编写了这段代码 但是当我调用函数 test
  • 将自动复制位图转换为 Pillow 图像

    我正在使用 Autopy 和 Pillow 用 Python 开发屏幕抓取工具 是否可以将位图对象转换为 Pillow 图像对象 我当前的解决方案是将位图对象保存为图像文件 然后使用路径创建 Pillow 图像对象 这种方法是really由
  • 如何使用 numpy 在二维数组上执行最大/平均池化

    给定一个 2D M x N 矩阵和一个 2D 内核 K x L 我如何返回一个矩阵 该矩阵是使用图像上给定内核进行最大或平均池化的结果 如果可能的话我想使用 numpy 注意 M N K L 可以是偶数也可以是奇数 并且它们不需要彼此完全整
  • C中静态变量的初始化[重复]

    这个问题在这里已经有答案了 可能的重复 C中静态变量的初始化 https stackoverflow com questions 13251083 the initialization of static variable in c 我知道
  • 带有预填充 .sqlite 的核心数据 (Swift3)

    目前 我正在对现有 iOS9 应用程序进行 Swift3 iOS10 更新 该应用程序存储了欧洲各地约 10 000 个电动汽车充电点 到目前为止 我总是为应用程序提供预填充的数据库 xcappdata 包中的 sqlite sqlite
  • 如何获取存储过程中的表列表?

    数据库中有很多表和sp 我找到特定 sp 存储过程 中使用的表名称 sp depends sp name 没有给出想要的结果 我也用过INFORMATION SCHEMA TABLES INFORMATION SCHEMA ROUTINES
  • Spring MVC 将上下文路径附加到表单操作

    在 Spring 3 1 下运行相同的代码很好 刚刚升级到3 2 现在出现以下问题
  • 在 iOS 上使用 MDCBottomNavigationBar 切换视图控制器

    我正在尝试创建一个使用 Material Design 库的底部导航功能的 iOS 应用程序 我可以获得带有底部导航栏的视图控制器来编译和显示 但我无法添加其他视图控制器并在单击不同选项卡时在它们之间切换 我将所有内容简化为两个文件 一个是
  • 如何存储和计算版本控制历史记录?

    考虑这个简单的 python 代码 它演示了一个非常简单的字典版本控制设计 def build current history current for action key value in history assert action in
  • 在AWS EC2上挂载NVME磁盘

    所以我在每个节点上使用 NVME 磁盘创建了 i3 large 这是我的过程 lsblk gt nvme0n1 检查 nvme 是否尚未安装 sudo mkfs ext4 E nodiscard dev nvme0n1 sudo mount
  • 如何在dc.js中过滤dataTable而不影响其他维度

    因此 有一段时间我一直在努力解决如何在 dc js 中过滤数据表而不影响其他维度 这似乎违反直觉 因为它违背了 crossfilter dc js 背后的数据过滤器 的最佳表现 但我将解释为什么这是相关的 假设我有一个人名 年龄和性别的数据
  • 从标签中提取 HTML5 数据属性

    我想从标签中提取所有 HTML5 数据属性 就像这个 jQuery 插件 http www orangesoda net jquery dataset html 例如 给定 span class highlight Joe Bloggs s