class LibXML::XML::SaxParser
XML::SaxParser provides a callback based API for parsing documents, in contrast to XML::Parser‘s tree based API and XML::Reader’s stream based API.
The XML::SaxParser API is fairly complex, not well standardized, and does not directly support validation making entity, namespace and base processing relatively hard.
To use the XML::SaxParser, register a callback class via the XML::SaxParser#callbacks=. It is easiest to include the XML::SaxParser::Callbacks module in your class and override the methods as needed.
Basic example:
class MyCallbacks include XML::SaxParser::Callbacks def on_start_element(element, attributes) puts #Element started: #{element}" end end parser = XML::SaxParser.string(my_string) parser.callbacks = MyCallbacks.new parser.parse
You can also parse strings (see XML::SaxParser.string) and io objects (see XML::SaxParser.io).
Attributes
Public Class Methods
Creates a new parser by parsing the specified file or uri.
# File lib/libxml/sax_parser.rb 10 def self.file(path) 11 context = XML::Parser::Context.file(path) 12 self.new(context) 13 end
Creates a new reader by parsing the specified io object.
Parameters:
encoding - The document encoding, defaults to nil. Valid values
are the encoding constants defined on XML::Encoding.
# File lib/libxml/sax_parser.rb 25 def self.io(io, options = {}) 26 context = XML::Parser::Context.io(io) 27 context.encoding = options[:encoding] if options[:encoding] 28 self.new(context) 29 end
Creates a new XML::Parser from the specified XML::Parser::Context.
static VALUE rxml_sax_parser_initialize(int argc, VALUE *argv, VALUE self)
{
VALUE context = Qnil;
rb_scan_args(argc, argv, "01", &context);
if (context == Qnil)
{
rb_raise(rb_eArgError, "An instance of a XML::Parser::Context must be passed to XML::SaxParser.new");
}
rb_ivar_set(self, CONTEXT_ATTR, context);
return self;
}
Creates a new parser by parsing the specified string.
# File lib/libxml/sax_parser.rb 35 def self.string(string) 36 context = XML::Parser::Context.string(string) 37 self.new(context) 38 end
Public Instance Methods
Parse the input XML, generating callbacks to the object registered via the callbacks attributesibute.
static VALUE rxml_sax_parser_parse(VALUE self)
{
VALUE context = rb_ivar_get(self, CONTEXT_ATTR);
xmlParserCtxtPtr ctxt;
Data_Get_Struct(context, xmlParserCtxt, ctxt);
ctxt->sax2 = 1;
ctxt->userData = (void*)rb_ivar_get(self, CALLBACKS_ATTR);
memcpy(ctxt->sax, &rxml_sax_handler, sizeof(rxml_sax_handler));
int status = xmlParseDocument(ctxt);
/* Now check the parsing result*/
if (status == -1 || !ctxt->wellFormed)
{
rxml_raise(&ctxt->lastError);
}
return Qtrue;
}