aboutsummaryrefslogtreecommitdiffstats
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
parent22e26d350a48a3fa1521eac43ead67eea8df8595 (diff)
downloadruby-8d7fa2291cfa3f8d9f6df744ef8b4f3c15db9245.tar.gz
* 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
-rw-r--r--ChangeLog6
-rw-r--r--NEWS3
-rw-r--r--lib/xmlrpc/config.rb1
-rw-r--r--lib/xmlrpc/parser.rb34
4 files changed, 43 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 0d53c5e3f4..84f622d093 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Oct 13 17:53:01 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+
+ * lib/xmlrpc/parser.rb: added new parser class using libxml-ruby gem.
+ [Feature #9379][ruby-core:59633]
+ * lib/xmlrpc/config.rb: ditto.
+
Mon Oct 13 16:32:56 2014 Tanaka Akira <akr@fsij.org>
* lib/find.rb (Find.find): Call to_path for arguments to obtain
diff --git a/NEWS b/NEWS
index 82ab9b3cde..ff745dfe9d 100644
--- a/NEWS
+++ b/NEWS
@@ -159,6 +159,9 @@ with all sufficient information, see the ChangeLog file.
http://docs.seattlerb.org/rubygems/History_txt.html#label-2.4.2+%2F+2014-10-01
+* XMLRPC
+ * Added new parser class named LibXMLStreamParser.
+
=== Stdlib compatibility issues (excluding feature bug fixes)
* lib/mathn.rb
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