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 に答える