55 lines
2.0 KiB
Ruby
55 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Nokogiri
|
|
module XML
|
|
###
|
|
# SAX Parsers are event-driven parsers.
|
|
#
|
|
# Two SAX parsers for XML are available, a parser that reads from a string or IO object as it
|
|
# feels necessary, and a parser that you explicitly feed XML in chunks. If you want to let
|
|
# Nokogiri deal with reading your XML, use the Nokogiri::XML::SAX::Parser. If you want to have
|
|
# fine grain control over the XML input, use the Nokogiri::XML::SAX::PushParser.
|
|
#
|
|
# If you want to do SAX style parsing of HTML, check out Nokogiri::HTML4::SAX.
|
|
#
|
|
# The basic way a SAX style parser works is by creating a parser, telling the parser about the
|
|
# events we're interested in, then giving the parser some XML to process. The parser will notify
|
|
# you when it encounters events you said you would like to know about.
|
|
#
|
|
# To register for events, subclass Nokogiri::XML::SAX::Document and implement the methods for
|
|
# which you would like notification.
|
|
#
|
|
# For example, if I want to be notified when a document ends, and when an element starts, I
|
|
# would write a class like this:
|
|
#
|
|
# class MyHandler < Nokogiri::XML::SAX::Document
|
|
# def end_document
|
|
# puts "the document has ended"
|
|
# end
|
|
#
|
|
# def start_element name, attributes = []
|
|
# puts "#{name} started"
|
|
# end
|
|
# end
|
|
#
|
|
# Then I would instantiate a SAX parser with this document, and feed the parser some XML
|
|
#
|
|
# # Create a new parser
|
|
# parser = Nokogiri::XML::SAX::Parser.new(MyHandler.new)
|
|
#
|
|
# # Feed the parser some XML
|
|
# parser.parse(File.open(ARGV[0]))
|
|
#
|
|
# Now my document handler will be called when each node starts, and when then document ends. To
|
|
# see what kinds of events are available, take a look at Nokogiri::XML::SAX::Document.
|
|
#
|
|
module SAX
|
|
end
|
|
end
|
|
end
|
|
|
|
require_relative "sax/document"
|
|
require_relative "sax/parser_context"
|
|
require_relative "sax/parser"
|
|
require_relative "sax/push_parser"
|