【问题标题】:how to get attribute values using nokogiri如何使用 nokogiri 获取属性值
【发布时间】:2012-07-21 06:13:59
【问题描述】:

我有一个网页,我不知道其 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 我想要与到达“我的文本”节点时遇到的每个元素节点关联的属性

约束是 ::我无法使用 Web 浏览器中提供的任何开发人员工具

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

【问题讨论】:

  • 您对哪些属性感兴趣?此外,要获取具有所需测试的节点列表,您可以使用//*[.='my text']。这将返回所有带有文本 my text 的节点。
  • 我正在寻找上述突出显示的输出中所有元素节点的所有属性...现在可能会发生某些节点可能具有或不具有属性节点...所以我想要一个哈希 :: element node => 属性值...顺便说一句,感谢您的输入..我已经更新了问题..

标签: ruby dom xpath nokogiri


【解决方案1】:

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

someExpr/@*

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

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

例如,如果我们想要的元素被选中:

/a/b/c 

那么它的所有属性都被选择:

/a/b/c/@*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 2015-12-29
    • 2011-06-14
    • 1970-01-01
    • 2012-01-22
    • 2013-02-24
    • 2011-10-29
    • 2011-02-23
    相关资源
    最近更新 更多