2017-04-12 6 views
0

データベーステーブルのテキストフィールドにマークアップがたくさんありますが、このマークアップは異なる構造を持つ可能性があります。 データベースに格納されたこれらのマークアップのそれぞれからプレーンテキストを抽出する必要があるので、テストの結果、ruby用の最速のxml解析ライブラリであるので、Ox gemを使用することにしました。私はそれをしようとすると、私はこのようなエラーが出る:'Ox' gemの助けを借りてRubyのhtmlマークアップからプレーンテキストを抽出する方法

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.sax_htmlメソッドを使用するHTMLを解析するためのOxライブラリ

+0

あなたのHTMLは実際には有効なXMLですか? HTMLはXMLのように見えるかもしれませんが、XMLの厳密な規則に従っていても、有効なHTMLによっては引き続き使用できません。 – spickermann

+0

このhtmlは有効なxmlではありません。例えば、自己閉じタグ 'logo ')'を含むことができます。主な質問はどのように解析し、いつも有効なxmlではないHTMLからテキストを抽出することです。 'Nokogiri'のような他のライブラリはそういう可能性があるので、おそらく' Ox'でもできるでしょう。 – Edward

+0

OXのホームページでHTML解析に関するセクションを読んでみましたか:http://www.ohler.com/ox/? – spickermann

答えて

0

を使用する必要があり、しかし、そうではありません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 
関連する問題