必要なテキストを含む最も近いノードにドリルインすることが重要です。ノード/ XML ::要素を返すat_xpath
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
と:これを考えてみましょう。 search
,css
およびxpath
はNodeSetを返します。ノードまたはノードセットを見たときにどのようにtext
またはinner_html
リターン情報には大きな違いがあります:search
を使用してノードセットを返却し、そのtext
は、ノードのテキストが一緒に連結返したこと
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"
お知らせ。これはめったにあなたが望むものではありません。
ノコギリは、セレクタがCSSの99%かXPathの99%かを判断するのに十分にスマートであることに注意してください。どちらのタイプのセレクタにも汎用search
とat
を使用すると便利です。
どのようなエスケープシーケンスですか?私は、様々なテキストノードのテキストコンテンツであるタブと改行のみを参照します。 「[mcve]」を参照してください。 HTMLのサンプルを最小限にすることなく、あらゆる種類の詳細な答えを与えることは困難です。 –