From 8d7fa2291cfa3f8d9f6df744ef8b4f3c15db9245 Mon Sep 17 00:00:00 2001 From: hsbt Date: Mon, 13 Oct 2014 08:53:16 +0000 Subject: * lib/xmlrpc/parser.rb: added new parser class using libxml-ruby gem. [Feature #9379][ruby-core:59633] * lib/xmlrpc/config.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/xmlrpc/config.rb | 1 + lib/xmlrpc/parser.rb | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) (limited to 'lib') 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 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 -- cgit v1.2.3