Il est important d'explorer le noeud le plus proche contenant le texte que vous voulez. Considérez ceci:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<body>
<p>foo</p>
</body>
</html>
EOT
doc.at('body').inner_html # => "\n <p>foo</p>\n "
doc.at('body').text # => "\n foo\n "
doc.at('p').inner_html # => "foo"
doc.at('p').text # => "foo"
at
, at_css
et at_xpath
retourner un nœud/XML :: Element. search
, css
et xpath
renvoient un NodeSet. Il y a une grande différence dans la façon dont text
ou inner_html
informations de retour lors de la recherche à un nœud ou NodeSet:
doc = Nokogiri::HTML(<<EOT)
<html>
<body>
<p>foo</p>
<p>bar</p>
</body>
</html>
EOT
doc.at('p') # => #<Nokogiri::XML::Element:0x3fd635cf36f4 name="p" children=[#<Nokogiri::XML::Text:0x3fd635cf3514 "foo">]>
doc.search('p') # => [#<Nokogiri::XML::Element:0x3fd635cf36f4 name="p" children=[#<Nokogiri::XML::Text:0x3fd635cf3514 "foo">]>, #<Nokogiri::XML::Element:0x3fd635cf32bc name="p" children=[#<Nokogiri::XML::Text:0x3fd635cf30dc "bar">]>]
doc.at('p').class # => Nokogiri::XML::Element
doc.search('p').class # => Nokogiri::XML::NodeSet
doc.at('p').text # => "foo"
doc.search('p').text # => "foobar"
Notez que l'utilisation d'un search
retourné NodeSet et que text
renvoyé le texte du nœud concaténés. C'est rarement ce que tu veux. Notez également que Nokogiri est assez intelligent pour savoir si un sélecteur est CSS ou XPath 99% du temps, donc en utilisant le search
générique et at
pour l'un ou l'autre type de sélecteur est très pratique.
Quelles séquences d'échappement? Je ne vois que des onglets et de nouvelles lignes, qui seraient le contenu textuel des différents nœuds de texte. S'il vous plaît voir "[mcve]". Sans un échantillon minimal du HTML, il est difficile de donner une réponse détaillée. –