Вопрос
Проведя несколько часов с Ruby Debugger, я, наконец, узнал, что мне нужно очистить некоторые искаженные HTML-страницы, прежде чем я смогу отправить их в Hpricot.Лучшее решение, которое я нашел на данный момент, - это Аккуратный интерфейс Ruby.
Аккуратный отлично работает из командной строки, а также работает интерфейс Ruby.Однако для этого требуется dl/импорт, который не загружается в 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.Я опубликовал код, который передает данные документа через 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{...}
или отступления.Возможно, вы также захотите рассмотреть popen
(и пропускать через это все).
Возможно, это не элегантно, но, скорее всего, поможет вам начать работу с минимальными хлопотами, чем пытаться возиться с неподдерживаемыми библиотеками.