ruby - 如何使用 nokogiri 获取属性值

标签 ruby dom xpath nokogiri

我有一个网页,我不知道其 DOM 结构......但我知道我需要在该特定网页中找到的文本......所以为了获得它的 xpath,我所做的是:

doc = Nokogiri::HTML(webpage)
doc.traverse { |node|
  if node.text?
    if node.content == "my text"
      path << node.path
    end
  end
}
puts path

现在假设我得到类似::的输出

   html/body/div[4]/div[8]/div/div[38]/div/p/text()

以便稍后当我再次访问该网页时,我可以这样做::

    doc.xpath("#{path[0]}")

而不是每次我想要文本时都遍历整个 DOM 树

我想做一些进一步的处理,因为我需要知道上面 xpath 输出中的哪些元素节点具有与之关联的属性以及它们的属性值是什么。我将如何实现这一目标?我想要的输出是

    #=> output desired
{ p => p_attr_value , div => div_attr_value , div[38] => div[38]_attr_value.....so on }

我在搜索“我的文本”所在的节点时没有遇到问题..我想拥有“我的文本”节点的完整xpath..这就是为什么我进行了整个遍历......现在找到完整的 xpath 我想要与到达“我的文本”节点时遇到的每个元素节点相关联的属性

约束是:::我不能使用网络浏览器中可用的任何开发人员工具

PS::我是 ruby​​ 和 nokogiri 的新手..

最佳答案

要选择使用 XPath 表达式 someExpr 选择的元素的所有属性,您需要计算一个新的 XPath 表达式:

someExpr/@*

其中 someExpr 必须替换为用于选择特定元素的真实 XPath 表达式。

这会选择由 Xpath 表达式 someExpr 选择的所有(我们假设这只是一个)元素的所有属性

例如,如果我们想要的元素是通过以下方式选择的:

/a/b/c 

然后它的所有属性被选择:

/a/b/c/@*

关于ruby - 如何使用 nokogiri 获取属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11605261/

相关文章:

html - 获取所有节点的 XPATH

javascript - Firefox 中文本框的 onpropertychange?

ruby - 将两个数组添加到另一个数组中

ruby-on-rails - 在 Rails 中动态更新内容

ruby - 尝试在 Windows 8 (x64) : Error installing fast-stemmer-1. 0.2.gem 上安装 Jekyll

javascript - SPAN 标签对 TR 标签进行分组,但 SPAN 不是 TR 的父级

用于操作 Facebook 图像的 Javascript 代码在控制台中有效,但在扩展中无效

xml - 从 JSON 字符串中读取数组元素的 XPath

html - 获取文本,后跟某些文本

ruby - 为什么单个空数组的并行赋值会分配多个nil?