aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/xmlrpc/config.rb1
-rw-r--r--lib/xmlrpc/parser.rb34
2 files changed, 34 insertions, 1 deletions
diff --git a/lib/xmlrpc/config.rb b/lib/xmlrpc/config.rb
index 98081473b4..7923f3a26e 100644
--- a/lib/xmlrpc/config.rb
+++ b/lib/xmlrpc/config.rb
@@ -18,6 +18,7 @@ module XMLRPC # :nodoc:
# * XMLParser::XMLStreamParser (fastest)
# * XMLParser::REXMLStreamParser
# * XMLParser::XMLScanStreamParser
+ # * XMLParser::LibXMLStreamParser
DEFAULT_PARSER = XMLParser::REXMLStreamParser
# enable <code><nil/></code> tag
diff --git a/lib/xmlrpc/parser.rb b/lib/xmlrpc/parser.rb
index 0afbd07e6b..be8accfd6b 100644
--- a/lib/xmlrpc/parser.rb
+++ b/lib/xmlrpc/parser.rb
@@ -814,12 +814,44 @@ module XMLRPC # :nodoc:
end
end
+ class LibXMLStreamParser < AbstractStreamParser
+ def initialize
+ require 'libxml'
+ @parser_class = LibXMLStreamListener
+ end
+
+ class LibXMLStreamListener
+ include StreamParserMixin
+
+ def on_start_element_ns(name, attributes, prefix, uri, namespaces)
+ startElement(name)
+ end
+
+ def on_end_element_ns(name, prefix, uri)
+ endElement(name)
+ end
+
+ alias :on_characters :character
+ alias :on_cdata_block :character
+
+ def method_missing(*a)
+ end
+
+ def parse(str)
+ parser = LibXML::XML::SaxParser.string(str)
+ parser.callbacks = self
+ parser.parse()
+ end
+ end
+ end
+
XMLParser = XMLTreeParser
NQXMLParser = NQXMLTreeParser
Classes = [XMLStreamParser, XMLTreeParser,
NQXMLStreamParser, NQXMLTreeParser,
- REXMLStreamParser, XMLScanStreamParser]
+ REXMLStreamParser, XMLScanStreamParser,
+ LibXMLStreamParser]
# yields an instance of each installed parser
def self.each_installed_parser