Class: Nokogiri::XML::EnumParse

Inherits:
Object
  • Object
show all
Defined in:
lib/nokogiri/enumparse.rb

Overview

Python の etree.iterparse と類似の機能を提供するクラス

Defined Under Namespace

Classes: SAXDoc

Instance Method Summary collapse

Constructor Details

#initialize(file_path, tag) ⇒ EnumParse

コンストラクタ

Parameters:

  • file_path (String)

    XMLファイルのパス

  • tag (String)

    XMLファイルから分割して切り出すタグ

Raises:

  • (ArgumentError)


53
54
55
56
57
58
59
60
61
# File 'lib/nokogiri/enumparse.rb', line 53

def initialize(file_path, tag)
    raise ArgumentError, 'file_path is not set.' unless file_path.is_a?(String)
    raise ArgumentError, 'tag is not set.' unless tag.is_a?(String)

    @fiber = Fiber.new do
        Nokogiri::XML::SAX::Parser.new(SAXDoc.new(tag)).parse(File.open(file_path)) {|ctx| ctx.recovery = true}
        Fiber.yield(nil)
    end
end

Instance Method Details

#enumeratorEnumerator

指定された tag の XMLエレメントを順次処理する Enumerator オブジェクトを返します

Returns:

  • (Enumerator)

    XMLエレメントを順次処理する Enumerator オブジェクト



68
69
70
71
72
73
74
75
76
# File 'lib/nokogiri/enumparse.rb', line 68

def enumerator
    Enumerator.new do |y|
        loop do
            res = @fiber.resume
            break unless res
            y << res
        end
    end
end