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.

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?

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.