Nokogiri将值作为字符串返回,而不是数组

我正在使用Nokogiri运行一个脚本,它返回多个值。 我的印象(并由多个来源保证)结果应该是数组的forms。 相反,我得到一个丑陋的字符串。 这是代码

require 'nokogiri' require 'open-uri' require 'spreadsheet' profile_page_scraper = Nokogiri::HTML(open('http://www.crunchbase.com/company/facebook')) puts profile_page_scraper.css('div.col1_content td.td_left').text 

哪个返回:

 PublicDateRaisedPost IPO ValuationWebsiteBlogTwitterCategoryEmployeesFoundedDescription 

我知道我可以使用map来快速解决这个问题,但我很困惑为什么这不会返回一个数组。 从理论上讲,它应该返回这样的东西:

 ["Public", "Date", "Raised" ... "Description"] 

任何想法为什么这不起作用?

NodeSet#text总是返回一个字符串(否则它可能会被称为NodeSet#texts )。 Nokogiri文档不是那么好,如有疑问,请查看源代码:

  # lib/nokogiri/xml/node_set.rb def inner_text collect{|j| j.inner_text}.join('') end alias :text :inner_text 

获取文本数组: nodes.map(&:text)

css方法返回Nokogiri::XML::NodeSet的实例,其中包括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] 

因此,您可以将所有标准迭代器与此结果集中每个元素的content属性结合使用。 例如:

 nodes.each { |n| puts n.content }