ruby--ruby/lib/rss/rexmlparser.rb

44 lines
805 B
Ruby
Raw Normal View History

require "rexml/document"
require "rexml/streamlistener"
/\A(\d+)\.(\d+).\d+\z/ =~ REXML::Version
if $1.to_i < 2 or ($1.to_i == 2 and $2.to_i < 5)
raise LoadError
end
module RSS
class Parser < BaseParser
private
def _parse
begin
REXML::Document.parse_stream(@rss, @listener)
rescue RuntimeError => e
raise NotWellFormedError.new{e.message}
rescue REXML::ParseException => e
context = e.context
line = context[0] if context
raise NotWellFormedError.new(line){e.message}
end
end
end
class Listener < BaseListener
include REXML::StreamListener
include ListenerMixin
def xmldecl(version, encoding, standalone)
super
# Encoding is converted to UTF-8 when REXML parse XML.
@encoding = 'UTF-8'
end
alias_method(:cdata, :text)
end
end