Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何借助';牛';宝石_Html_Ruby_Xml_Html Parsing - Fatal编程技术网

Html 如何借助';牛';宝石

Html 如何借助';牛';宝石,html,ruby,xml,html-parsing,Html,Ruby,Xml,Html Parsing,我在数据库表文本字段中存储了很多标记,这些标记可以有不同的结构。 我需要从数据库中存储的每个标记中提取纯文本,因此我决定使用Oxgem,因为根据测试,它是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] 我知道如何使用No

我在数据库表文本字段中存储了很多标记,这些标记可以有不同的结构。 我需要从数据库中存储的每个标记中提取纯文本,因此我决定使用
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
库来解析html,我应该使用带有sax处理程序的
Ox.sax_html
方法,而不是
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
需要“stringio”
需要“牛”
类TextHandler<::Ox::Sax
属性读取器:已解析的文本
def初始化()
@已解析的_文本=“”
结束
def文本(值)

@解析文本您确定您的HTML实际上是有效的XML吗?HTML可能看起来像XML,也可能是XML,但它不能遵循XML的严格规则来保持有效的HTML。此HTML不是有效的XML,例如,它可能包含自关闭标记
。主要问题是如何从html中解析和提取文本,而html并不总是有效的xml。其他库,如
Nokogiri
也有这种可能性,因此可能可以使用
Ox
来完成。您是否阅读并尝试过Ox主页上有关HTML解析的部分:?@spickermann是的,我尝试过更改文档中的默认设置,但结果是一样的:
Ox::ParseError
…您能为您的问题提供一个示例文档,例如第1行第23列失败的文档吗?