Nokogiri - 使用XML,而不是HTML

时间:2011-04-13 15:25:31

标签: ruby xml nokogiri

我遇到了让Nokogiri正常工作的问题。我正在使用版本1.4.4和Ruby 1.9.2。

我安装了libxml2 libxslt并且是最新的。当我使用XML运行Ruby脚本时,它运行良好。

require 'nokogiri'

doc = Nokogiri::XML(File.open("test.xml"))
doc = doc.css("name").each do |node|
    puts node.text
end

进入CL,运行ruby test.rb,返回

Name 1
Name 2
Name 3

人群疯狂。 我调整了一些事情,对代码做了一些调整......

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://domain.tld"))
doc = doc.css("p").each do |node|
    puts node.text
end

回到CL,ruby test.rb,返回......什么都没有!只是一个新的空行。

是否有任何理由可以使用XML文件,而不是HTML?

1 个答案:

答案 0 :(得分:5)

要调试此类问题,我们需要您提供更多信息。由于您没有提供有效的URL,并且因为我们知道Nokogiri可以解决这类问题,所以调试工作就在您身上。

以下是我要做的测试:

在IRB:

  1. 执行此操作时是否获得输出:open('http://whateverURLyouarehiding.com').read
  2. 如果返回有效文档,那么在Nokogiri::HTML(...)中包装上一个打开语句时会得到什么。这也需要保留前一行中的.read,因此Nokogiri正在接收页面的主体,而不是IO流。
  3. 尝试上面的#2,但删除.read。这将告诉Nokogiri读取IO流是否存在问题,但我严重怀疑它有问题,因为我一直使用它。那时我怀疑你的系统有问题。
  4. 如果您在#2和#3中收到文档,则问题可能出在您的访问者身上;我怀疑你所寻找的东西是不存在的。
  5. 如果确实存在,则在Nokogiri解析文档后检查doc.errors的值。它可能是在文档中发现错误,如果是这样,它们将被捕获。