diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-13 08:53:16 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-13 08:53:16 +0000 |
commit | 8d7fa2291cfa3f8d9f6df744ef8b4f3c15db9245 (patch) | |
tree | e84d0b288379d41b0c3e182e03c675edd8924346 /lib | |
parent | 22e26d350a48a3fa1521eac43ead67eea8df8595 (diff) |
* 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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/xmlrpc/config.rb | 1 | ||||
-rw-r--r-- | lib/xmlrpc/parser.rb | 34 |
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 |