summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-13 08:53:16 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-13 08:53:16 +0000
commit8d7fa2291cfa3f8d9f6df744ef8b4f3c15db9245 (patch)
treee84d0b288379d41b0c3e182e03c675edd8924346 /lib
parent22e26d350a48a3fa1521eac43ead67eea8df8595 (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.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