module Nokogiri::XML::SAX - nokogiri-1.15.2 Documentation

# module Nokogiri::XML::SAX

`SAX` Parsers are event driven parsers. `Nokogiri` provides two different event based parsers when dealing with `XML`. If you want to do `SAX` style parsing using `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, you simply 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 MyDocument < 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(MyDocument.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`.

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 lets you spoon feed it `XML`. 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`.