6 votes

Essayer d'extraire les valeurs d'attributs à l'aide de Nokogiri avec des sélecteurs CSS pseudoclasses personnalisés

Après avoir chargé une page (X)HTML, j'essaie d'obtenir la valeur de l'attribut "content" d'une balise méta. Par exemple, étant donné :

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

Je voudrais extraire la valeur "Jean Dupont".

Je sais comment le faire en utilisant XPath et je comprends que CSS a été conçu principalement pour la sélection d'éléments mais Nokogiri permet de définir pseudoclasses CSS personnalisées qui pourrait être utilisé comme suit :

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)

Cependant, cela renvoie le même résultat que

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

Que se passe-t-il ? Nokogiri utilise le même moteur en dessous pour les recherches CSS et XPath, donc tout ce qui est possible dans XPath devrait être réalisable dans CSS. Comment dois-je procéder pour extraire la valeur de l'attribut ?

7voto

akuhn Points 12241

Pourquoi pas ?

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

D'après ce que je comprends, les pseudoclasses peuvent être utilisées pour filtrer le nodeset uniquement, mais pas pour remplacer le nodeset par une autre valeur telle que la valeur de l'attribut d'un des nœuds.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X