Class: Nokogiri::XML::SAX::PushParser
- Inherits:
-
Object
- Object
- Nokogiri::XML::SAX::PushParser
- Defined in:
- lib/nokogiri/xml/sax/push_parser.rb,
ext/nokogiri/xml_sax_push_parser.c
Overview
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
Direct Known Subclasses
Instance Attribute Summary collapse
-
#document ⇒ Object
The Nokogiri::XML::SAX::Document on which the PushParser will be operating.
Instance Method Summary collapse
-
#finish ⇒ Object
Finish the parsing.
-
#initialize(doc = XML::SAX::Document.new, file_name = nil, encoding = "UTF-8") ⇒ PushParser
constructor
Create a new PushParser with
doc
as the SAX Document, providing an optionalfile_name
andencoding
. - #options ⇒ Object
- #options=(options) ⇒ Object
-
#replace_entities ⇒ Object
Should this parser replace entities? & will get converted to ‘&’ if set to true.
-
#replace_entities=(boolean) ⇒ Object
Should this parser replace entities? & will get converted to ‘&’ if set to true.
-
#write(chunk, last_chunk = false) ⇒ Object
(also: #<<)
Write a
chunk
of XML to the PushParser.
Constructor Details
#initialize(doc = XML::SAX::Document.new, file_name = nil, encoding = "UTF-8") ⇒ PushParser
Create a new PushParser with doc
as the SAX Document, providing an optional file_name
and encoding
35 36 37 38 39 40 41 42 |
# 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 |
Instance Attribute Details
#document ⇒ Object
The Nokogiri::XML::SAX::Document on which the PushParser will be operating
30 31 32 |
# File 'lib/nokogiri/xml/sax/push_parser.rb', line 30 def document @document end |
Instance Method Details
#finish ⇒ Object
Finish the parsing. This method is only necessary for Nokogiri::XML::SAX::Document#end_document to be called.
55 56 57 |
# File 'lib/nokogiri/xml/sax/push_parser.rb', line 55 def finish write("", true) end |
#options ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'ext/nokogiri/xml_sax_push_parser.c', line 88
static VALUE
get_options(VALUE self)
{
xmlParserCtxtPtr ctx;
Data_Get_Struct(self, xmlParserCtxt, ctx);
return INT2NUM(ctx->options);
}
|
#options=(options) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'ext/nokogiri/xml_sax_push_parser.c', line 97
static VALUE
set_options(VALUE self, VALUE options)
{
xmlParserCtxtPtr ctx;
Data_Get_Struct(self, xmlParserCtxt, ctx);
if (xmlCtxtUseOptions(ctx, (int)NUM2INT(options)) != 0) {
rb_raise(rb_eRuntimeError, "Cannot set XML parser context options");
}
return Qnil;
}
|
#replace_entities ⇒ Object
Should this parser replace entities? & will get converted to ‘&’ if set to true
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'ext/nokogiri/xml_sax_push_parser.c', line 117
static VALUE
get_replace_entities(VALUE self)
{
xmlParserCtxtPtr ctx;
Data_Get_Struct(self, xmlParserCtxt, ctx);
if (0 == ctx->replaceEntities) {
return Qfalse;
} else {
return Qtrue;
}
}
|
#replace_entities=(boolean) ⇒ Object
Should this parser replace entities? & will get converted to ‘&’ if set to true
137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'ext/nokogiri/xml_sax_push_parser.c', line 137
static VALUE
set_replace_entities(VALUE self, VALUE value)
{
xmlParserCtxtPtr ctx;
Data_Get_Struct(self, xmlParserCtxt, ctx);
if (Qfalse == value) {
ctx->replaceEntities = 0;
} else {
ctx->replaceEntities = 1;
}
return value;
}
|
#write(chunk, last_chunk = false) ⇒ Object Also known as: <<
Write a chunk
of XML to the PushParser. Any callback methods that can be called will be called immediately.
47 48 49 |
# File 'lib/nokogiri/xml/sax/push_parser.rb', line 47 def write(chunk, last_chunk = false) native_write(chunk, last_chunk) end |