質問
Rubyデバッガーで数時間過ごした後、Hpricotにフィードする前に、不正なHTMLページをクリーンアップする必要があることをようやく知りました。これまでに見つけた最良の解決策は、 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の提案に従って、私はlibtidyの代わりにpopen経由で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
解決
%x {。で JRuby 内からコマンドラインから使用できます。 。}
またはバックティック。また、 popen
を検討することもできます(そして、それをパイプ処理します)。
エレガントではないかもしれませんが、サポートされていないライブラリを台無しにしようとするよりも、最小限の手間で作業を開始できる可能性が高くなります。
所属していません StackOverflow