Использование Tidy в JRuby - PullRequest
       15

Использование Tidy в JRuby

2 голосов
/ 04 марта 2009

Проведя несколько часов с отладчиком 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? Поиск в Интернете показал, что он не был доступен в прошлом году .

В качестве альтернативы, кто-то может предложить другие способы очистки искаженного HTML в JRuby?

Обновление

Следуя совету Маркуса, я теперь использую Tidy через popen вместо libtidy. Я разместил код, который передает данные документа через приборку для дальнейшего использования. Надеюсь, это надежный и портативный.

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

1 Ответ

2 голосов
/ 04 марта 2009

Вы можете использовать его из командной строки из JRuby с %x{...} или обратными галочками. Возможно, вы также захотите рассмотреть popen (и передать через него все).

Возможно, это не элегантно, но, скорее всего, вы начнете работать с минимальными хлопотами, чем пытаться возиться с неподдерживаемыми библиотеками.

...