Context for XML SAX parsers. This class is usually not instantiated by the user. Instead, you should be looking at Nokogiri::XML::SAX::Parser
Parse file given filename
static VALUE parse_file(VALUE klass, VALUE filename)
{
xmlParserCtxtPtr ctxt = xmlCreateFileParserCtxt(StringValuePtr(filename));
return Data_Wrap_Struct(klass, NULL, deallocate, ctxt);
}
Parse io object with encoding
static VALUE parse_io(VALUE klass, VALUE io, VALUE encoding)
{
xmlCharEncoding enc = (xmlCharEncoding)NUM2INT(encoding);
xmlParserCtxtPtr ctxt = xmlCreateIOParserCtxt(
NULL,
NULL,
(xmlInputReadCallback)io_read_callback,
(xmlInputCloseCallback)io_close_callback,
(void *)io,
enc
);
return Data_Wrap_Struct(klass, NULL, deallocate, ctxt);
}
Parse the XML stored in memory in data
static VALUE parse_memory(VALUE klass, VALUE data)
{
xmlParserCtxtPtr ctxt;
if(NIL_P(data)) rb_raise(rb_eArgError, "data cannot be nil");
if(!(int)RSTRING_LEN(data))
rb_raise(rb_eRuntimeError, "data cannot be empty");
ctxt = xmlCreateMemoryParserCtxt(
StringValuePtr(data),
(int)RSTRING_LEN(data)
);
return Data_Wrap_Struct(klass, NULL, deallocate, ctxt);
}
Get the current column the parser context is processing.
static VALUE column(VALUE self)
{
xmlParserCtxtPtr ctxt;
xmlParserInputPtr io;
Data_Get_Struct(self, xmlParserCtxt, ctxt);
io = ctxt->input;
if(io)
return INT2NUM(io->col);
return Qnil;
}
Get the current line the parser context is processing.
static VALUE line(VALUE self)
{
xmlParserCtxtPtr ctxt;
xmlParserInputPtr io;
Data_Get_Struct(self, xmlParserCtxt, ctxt);
io = ctxt->input;
if(io)
return INT2NUM(io->line);
return Qnil;
}
Use sax_handler and parse the current document
static VALUE parse_with(VALUE self, VALUE sax_handler)
{
xmlParserCtxtPtr ctxt;
xmlSAXHandlerPtr sax;
if(!rb_obj_is_kind_of(sax_handler, cNokogiriXmlSaxParser))
rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::SAX::Parser");
Data_Get_Struct(self, xmlParserCtxt, ctxt);
Data_Get_Struct(sax_handler, xmlSAXHandler, sax);
/* Free the sax handler since we'll assign our own */
if(ctxt->sax && ctxt->sax != (xmlSAXHandlerPtr)&xmlDefaultSAXHandler)
xmlFree(ctxt->sax);
ctxt->sax = sax;
ctxt->userData = (void *)NOKOGIRI_SAX_TUPLE_NEW(ctxt, sax_handler);
xmlParseDocument(ctxt);
if(NULL != ctxt->myDoc) xmlFreeDoc(ctxt->myDoc);
NOKOGIRI_SAX_TUPLE_DESTROY(ctxt->userData);
return Qnil ;
}
Should this parser replace entities? & will get converted to ‘&’ if set to true
static VALUE get_replace_entities(VALUE self)
{
xmlParserCtxtPtr ctxt;
Data_Get_Struct(self, xmlParserCtxt, ctxt);
if(0 == ctxt->replaceEntities)
return Qfalse;
else
return Qtrue;
}
Should this parser replace entities? & will get converted to ‘&’ if set to true
static VALUE set_replace_entities(VALUE self, VALUE value)
{
xmlParserCtxtPtr ctxt;
Data_Get_Struct(self, xmlParserCtxt, ctxt);
if(Qfalse == value)
ctxt->replaceEntities = 0;
else
ctxt->replaceEntities = 1;
return value;
}
Generated with the Darkfish Rdoc Generator 2.