鑽入包含所需文本的最近節點非常重要。試想一下:
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
和at_xpath
返回節點/ XML ::元素。 search
,css
和xpath
返回一個NodeSet。有一個節點或節點集看時text
或inner_html
回報如何信息有很大的不同:
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"
注意使用search
返回一個節點集和text
返回節點的文本連接在一起。這很少是你想要的。
還要注意引入nokogiri是足夠聰明,想出一個選擇是CSS或XPath的99%的時間,所以使用任何類型選擇的一般search
和at
非常方便。
什麼是轉義序列?我只看到標籤和新行,這將是各種文本節點的文本內容。請參閱「[mcve]」。沒有HTML的最小樣本,很難給出任何詳細的答案。 –