Libxml-ruby: How to handle XML::Parser::ParseError?

Code:

require “rubygems”
require “xml”

class TaskLoader
class BadXML < RuntimeError
end

def load_tasks
doc = XML::Parser.file( “qq.xml” ).parse
# … work with document …
rescue XML::Parser::ParseError, BadXML # this is line #40
# …
end

end # TaskLoader

p TaskLoader.new.load_tasks # this is line #71

Output:

read_xml.rb:40:in `load_tasks’: uninitialized constant
LibXML::XML::Parser::ParseError (NameError)
from read_xml.rb:71

Question: why does ruby interpret XML::Parser::ParseError in rescue-
clause as LibXML::XML::Parser::ParseError?
Thanks.

On Sep 4, 2:41 pm, adrianopol [email protected] wrote:

read_xml.rb:40:in `load_tasks’: uninitialized constant
LibXML::XML::Parser::ParseError (NameError)
from read_xml.rb:71

Question: why does ruby interpret XML::Parser::ParseError in rescue-
clause as LibXML::XML::Parser::ParseError?

because the top level constant XML is LibXML::XML (check their
object_id )

Fred

OK, so, how should I handle this exception?

On Sep 4, 6:12 pm, Frederick C. [email protected]

Documentation (http://libxml.rubyforge.org/rdoc/classes/LibXML/XML/
Parser.html#M000123, bottom of the page) says that
XML::Parser::ParseError should be thrown. I tried to raise it (trying
to parse bad xml-string) and the exception is really different:

irb(main):005:0> XML::Parser.string( "<foo></ba/r/></foo>").parse
Fatal error: expected '>' at :1.
Fatal error: Opening and ending tag mismatch: foo line 1 and ba

at :1.
Fatal error: Extra content at the end of the document at :1.
LibXML::XML::Error: Fatal error: Extra content at the end of the
document at :1.
from (irb):5:in `parse’
from (irb):5
from (null):0

I think, i should handle LibXML::XML::Error instead. The problem is
solved.