尝试使用Nokogiri使用自定义伪类CSS选择器提取属性值

时间:2013-01-07 16:39:52

标签: html css ruby css-selectors nokogiri

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

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

我想提取值“John Smith”。

我知道如何使用XPath并理解CSS主要用于元素选择,但Nokogiri支持定义custom CSS pseudoclasses我认为可以使用如下:

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中可行。我该如何提取属性值?

1 个答案:

答案 0 :(得分:5)

为什么不呢?

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

据我所知,伪类只能用于过滤节点集,但不能用其他值替换节点集,例如其中一个节点属性的值。