如何借助'Ox'gem从ruby中的html标记中提取纯文本

时间:2017-04-12 16:42:38

标签: html ruby xml html-parsing

我在数据库表文本字段中存储了很多标记,这个标记可能有不同的结构。 我需要从存储在数据库中的每个标记中提取纯文本,因此我决定使用Ox gem,因为它是根据测试最快的ruby xml解析库。当我尝试这样做时,我得到这样的错误:

irb(main):026:0> Ox.parse(some_html)
Ox::ParseError: invalid format, document not terminated at line 1, column 23 [parse.c:521]

我知道如何使用Nokogiri,但我需要使用Ox

1 个答案:

答案 0 :(得分:0)

对于解析html我应该使用Ox.sax_html方法和sax处理程序,但不是Ox.parse

require 'stringio'
require 'ox'

class TextHandler < ::Ox::Sax
  attr_reader :parsed_text

  def initialize()
    @parsed_text = ''
  end

  def text(value)
    @parsed_text << " #{value}"
  end
end

text_handler = TextHandler.new

options = {
  symbolize: true,
  skip: :skip_white,
  smart: true
}

some_markup = '<img src="logo.png" alt="logo"><div>hello</div><div>world ...'

input = StringIO.new(some_markup)

Ox.sax_html(text_handler, input, options)

text_handler.parsed_text