I\'m running a script using Nokogiri that returns multiple values. I was under the impression (and reassured by multiple sources) that the results should be in the form of a
The css
method is returning an instance of Nokogiri::XML::NodeSet
, which includes Enumerable
.
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.crunchbase.com/company/facebook'))
nodes = doc.css('div.col1_content td.td_left')
nodes.class.ancestors
# => [Nokogiri::XML::NodeSet, Enumerable, Object, Kernel, BasicObject]
So you can use all the standard iterators in conjunction with the content
attribute of each element in this result set. For example:
nodes.each { |n| puts n.content }
NodeSet#text
always returns a string (otherwise it would probably be called NodeSet#texts
). Nokogiri docs are not so great, when in doubt check the source code:
# lib/nokogiri/xml/node_set.rb
def inner_text
collect{|j| j.inner_text}.join('')
end
alias :text :inner_text
To get an array of texts: nodes.map(&:text)