6

加载了(X)HTML 页面后,我试图获取元标记的“内容”属性的值。例如,给定:

<meta name="author" content="John Smith" />

我想提取值“John Smith”。

我知道如何使用 XPath 来做到这一点,并且理解 CSS 主要用于元素选择,但 Nokogiri 支持定义自定义 CSS 伪类,我认为可以如下使用:

class CSSext
  def attr(nodeset, tag)
    nodeset.first.attribute_nodes.find_all {|node| node.name == tag}
  end
end

doc = Nokogiri::HTML(open(someurl))
doc.css("meta[name='name']:attr('content')", CSSext.new)

但是,这将返回与

doc.css("meta[name='name']")

是什么赋予了?Nokogiri 在下面使用相同的引擎进行 CSS 和 XPath 搜索,因此在 XPath 中可能的任何事情在 CSS 中都应该是可行的。我应该如何提取属性值?

4

1 回答 1

7

为什么不只是?

doc.at("meta[name='author']")['content']

据我了解,伪类只能用于过滤节点集,但不能用其他值(例如节点属性之一的值)替换节点集。

于 2013-01-07T19:34:03.777 回答