質問

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 を検討することもできます(そして、それをパイプ処理します)。

エレガントではないかもしれませんが、サポートされていないライブラリを台無しにしようとするよりも、最小限の手間で作業を開始できる可能性が高くなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top