2

在使用 Ruby 调试器几个小时后,我终于了解到我需要清理一些格式错误的 HTML 页面,然后才能将它们提供给 Hpricot。到目前为止,我发现的最佳解决方案是Tidy Ruby 界面

Tidy在命令行中运行良好,Ruby 界面也运行良好。但是,它需要dl/import,但无法在 JRuby 中加载:

$ jirb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'tidy'
LoadError: no such file to load -- dl/import

这个库可用于 JRuby 吗?网络搜索显示它去年不可用

或者,有人可以建议其他方法来清理 JRuby 中格式错误的 HTML 吗?

更新

按照 Markus 的建议,我现在通过 popen 而不是 libtidy 使用 Tidy。我发布了通过 tidy 管道传输文档数据的代码,以供将来参考。希望这是健壮和便携的。

def clean(data)
    cleaned = nil
    tidy = IO.popen('tidy -f "log/tidy.log" --force-output yes -wrap 0 -utf8', 'w+')
    begin
        tidy.write(data)
        tidy.close_write
        cleaned = tidy.read
        tidy.close_read
    rescue Errno::EPIPE
        $stderr.print "Running 'tidy' failed: " + $!
        tidy.close
    end        
    return cleaned if cleaned and cleaned != ""
    return data
end
4

1 回答 1

2

您可以在JRuby中通过命令行使用它,并使用%x{...}反引号或反引号。您可能还需要考虑popen(并通过它进行管道传输)。

也许不优雅,但比试图弄乱不受支持的库更有可能让您轻松进行。

于 2009-03-03T21:48:17.807 回答