mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
44 lines
805 B
Ruby
44 lines
805 B
Ruby
|
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
|