Frage
einige Stunden mit der Ruby-Debugger Nachdem er ich endlich gelernt, dass ich einige ungültige HTML-Seiten bereinigen müssen, bevor ich diejenigen Hpricot ernähren kann. Die beste Lösung, die ich bisher gefunden ist die Tidy Ruby-Schnittstelle .
Tidy von der Kommandozeile funktioniert gut und auch die Ruby-Schnittstelle funktioniert. Es erfordert jedoch dl / Import , die in JRuby nicht geladen werden kann:
$ jirb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'tidy'
LoadError: no such file to load -- dl/import
Ist diese Bibliothek für JRuby? Eine Web-Suche ergab, dass nicht verfügbar letztes Jahr war.
Alternativ kann jemand andere Möglichkeiten vorschlagen ungültige HTML in JRuby aufzuräumen?
Update
Im Anschluss an Markus' Vorschlag jetzt ich über popen Tidy anstelle von libtidy. Ich stellte den Code, die Rohre die Dokumentdaten durch ordentlich für die Zukunft. Hoffentlich ist dies robust und tragbar.
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
Lösung
Sie können es von der Kommandozeile aus JRuby mit %x{...}
oder Backticks. Vielleicht möchten Sie auch popen
(und Rohr Dinge durch sie).
Nicht elegant vielleicht, aber eher Sie gehen mit minimalem Aufwand zu bekommen, als mit nicht unterstützten Bibliotheken zu verwirren versucht.