在Ruby中自动修复未关闭的HTML标记

时间:2012-08-28 17:00:43

标签: ruby nokogiri tidy

我正在尝试使用反向降价Ruby gem将HTML页面转换为Markdown。不幸的是它失败了:

/usr/lib/ruby/1.9.1/rexml/parsers/treeparser.rb:95:in `rescue in parse': #<REXML::ParseException: Missing end tag for 'img' (got "td") (REXML::ParseException)

来源包含一些IMGINPUT等标记,这些标记以>而不是/>结尾。

我已经尝试过tidy_ffi gem:

doc = Nokogiri::HTML(TidyFFI::Tidy.new(Nokogiri::HTML(page).to_html,
        :numeric_entities => 1,
        :output_html => 1,
        :merge_divs => 0,
        :merge_spans => 0,
        :join_styles => 0,
        :clean => 1,
        :indent => 1,
        :wrap => 0,
        :drop_empty_paras => 0,
        :literal_attributes => 1).clean)

但这没有任何区别。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

反向降价实际上假设降价处理器生成格式良好的XHTML。如果你没有,你可能想尝试html2markdown宝石。它使用Nokogiri解析,并且可能更强大(免责声明:我没有使用它)。

答案 1 :(得分:-2)

我创建了一个摘录html的宝石:https://www.ruby-toolbox.com/gems/auto_excerpt也许你可以使用它或查看它用来执行此操作的代码?不确定这是否回答了这个问题。

其实我刚注意到你两次打电话给Nokogiri :: HTML:Nokogiri::HTML(TidyFFI::Tidy.new(Nokogiri::HTML(page).to_html

我不确定你得到的错误是来自Nokogiri还是TifyFFI。