2017-04-12 3 views
0

데이터베이스 테이블 텍스트 필드에 마크 업이 많이 저장되어 있습니다.이 마크 업에는 다른 구조가있을 수 있습니다. 데이터베이스에 저장된 마크 업의 각 조각에서 일반 텍스트를 추출해야하므로 시험에 따라 루비에 대한 가장 빠른 xml 파싱 라이브러리부터 Ox 보석을 사용하기로 결정했습니다. 나는 그것을 할 때 나는이 같은 오류를 얻을 :'Ox'gem을 사용하여 루비의 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 일 수도 있지만 XML의 엄격한 규칙을 따라야 만 유효한 HTML을 사용할 수 있습니다. – spickermann

+0

이 html은 유효한 XML이 아니며, 예를 들어 자체 폐쇄 태그'logo ')'을 포함 할 수 있습니다. 주요 질문은 HTML에서 텍스트를 구문 분석하고 추출하는 것이고 항상 유효한 XML이 아닙니다. '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