钻入包含所需文本的最近节点非常重要。试想一下:
require 'nokogiri'
doc = Nokogiri::HTML(<
foo
EOT
doc.at('body').inner_html # => "\n
foo
\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(<
foo
bar
EOT
doc.at('p') # => #<:xml::element:0x3fd635cf36f4 name="p" children="[#<Nokogiri::XML::Text:0x3fd635cf3514">]>
doc.search('p') # => [#<:xml::element:0x3fd635cf36f4 name="p" children="[#<Nokogiri::XML::Text:0x3fd635cf3514">]>, #<:xml::element:0x3fd635cf32bc name="p" children="[#<Nokogiri::XML::Text:0x3fd635cf30dc">]>]
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非常方便。