class Nokogiri::XML::SAX::PushParser

PushParser can parse a document that is fed to it manually. It must be given a SAX::Document object which will be called with SAX events as the document is being parsed.

Calling PushParser#<< writes XML to the parser, calling any SAX callbacks it can.

PushParser#finish tells the parser that the document is finished and calls the end_document SAX method.

Example:

parser = PushParser.new(Class.new(XML::SAX::Document) {
  def start_document
    puts "start document called"
  end
}.new)
parser << "<div>hello<"
parser << "/div>"
parser.finish

Attributes

document[RW]

The Nokogiri::XML::SAX::Document on which the PushParser will be operating

Public Class Methods

new(doc = XML::SAX::Document.new, file_name = nil, encoding = "UTF-8") click to toggle source

Create a new PushParser with doc as the SAX Document, providing an optional file_name and encoding

# File lib/nokogiri/xml/sax/push_parser.rb, line 35
def initialize(doc = XML::SAX::Document.new, file_name = nil, encoding = "UTF-8")
  @document = doc
  @encoding = encoding
  @sax_parser = XML::SAX::Parser.new(doc)

  ## Create our push parser context
  initialize_native(@sax_parser, file_name)
end

Public Instance Methods

<<(chunk, last_chunk = false)
Alias for: write
finish() click to toggle source

Finish the parsing. This method is only necessary for Nokogiri::XML::SAX::Document#end_document to be called.

# File lib/nokogiri/xml/sax/push_parser.rb, line 55
def finish
  write("", true)
end
options() click to toggle source
static VALUE
get_options(VALUE self)
{
  xmlParserCtxtPtr ctx;

  ctx = noko_xml_sax_push_parser_unwrap(self);

  return INT2NUM(ctx->options);
}
options=(p1) click to toggle source
static VALUE
set_options(VALUE self, VALUE options)
{
  xmlParserCtxtPtr ctx;

  ctx = noko_xml_sax_push_parser_unwrap(self);

  if (xmlCtxtUseOptions(ctx, (int)NUM2INT(options)) != 0) {
    rb_raise(rb_eRuntimeError, "Cannot set XML parser context options");
  }

  return Qnil;
}
replace_entities click to toggle source

Should this parser replace entities? &amp; will get converted to ‘&’ if set to true

static VALUE
get_replace_entities(VALUE self)
{
  xmlParserCtxtPtr ctx;

  ctx = noko_xml_sax_push_parser_unwrap(self);

  if (0 == ctx->replaceEntities) {
    return Qfalse;
  } else {
    return Qtrue;
  }
}
replace_entities=(boolean) click to toggle source

Should this parser replace entities? &amp; will get converted to ‘&’ if set to true

static VALUE
set_replace_entities(VALUE self, VALUE value)
{
  xmlParserCtxtPtr ctx;

  ctx = noko_xml_sax_push_parser_unwrap(self);

  if (Qfalse == value) {
    ctx->replaceEntities = 0;
  } else {
    ctx->replaceEntities = 1;
  }

  return value;
}
write(chunk, last_chunk = false) click to toggle source

Write a chunk of XML to the PushParser. Any callback methods that can be called will be called immediately.

# File lib/nokogiri/xml/sax/push_parser.rb, line 47
def write(chunk, last_chunk = false)
  native_write(chunk, last_chunk)
end
Also aliased as: <<