From 2cfa999f7baa1b994c9a0e3fef6b05f30d2ec7d9 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 28 Jan 2004 03:46:13 +0000 Subject: * lib/rss: rss library imported. [ruby-dev:22726] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@5566 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rss/xmlparser.rb | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 lib/rss/xmlparser.rb (limited to 'lib/rss/xmlparser.rb') diff --git a/lib/rss/xmlparser.rb b/lib/rss/xmlparser.rb new file mode 100644 index 000000000..32061805a --- /dev/null +++ b/lib/rss/xmlparser.rb @@ -0,0 +1,69 @@ +begin + require "xml/encoding-ja" +rescue LoadError + require "xmlencoding-ja" + if defined?(Kconv) + module XMLEncoding_ja + class SJISHandler + include Kconv + end + end + end +end + +module RSS + + class XMLParser < ::XML::Parser + + include XML::Encoding_ja + + def listener=(listener) + @listener = listener + end + + def startElement(name, attrs) + @listener.tag_start(name, attrs) + end + + def endElement(name) + @listener.tag_end(name) + end + + def character(data) + @listener.text(data) + end + + def xmlDecl(version, encoding, standalone) + @listener.xmldecl(version, encoding, standalone == 1) + end + + end + + class Parser < BaseParser + + private + def _parse + begin + parser = XMLParser.new + parser.listener = @listener + parser.parse(@rss) + rescue XMLParserError => e + raise NotWellFormedError.new(parser.line){e.message} + end + end + + end + + class Listener < BaseListener + + include ListenerMixin + + def xmldecl(version, encoding, standalone) + super + # Encoding is converted to UTF-8 when XMLParser parses XML. + @encoding = 'UTF-8' + end + + end + +end -- cgit