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

**URL:** <https://www.ruby-forum.com/t/libxml-ruby-how-to-handle-xml-parseerror/174953>\
**Category:** Rails\
**Created:** [September 4, 2009, 4:09pm UTC](https://www.ruby-forum.com/t/libxml-ruby-how-to-handle-xml-parseerror/174953 "2009-09-04T16:09:18Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![adrianopol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/45deac/32.png) [@adrianopol](https://www.ruby-forum.com/u/adrianopol)\
**Post date:** [September 4, 2009, 4:09pm UTC](https://www.ruby-forum.com/t/libxml-ruby-how-to-handle-xml-parseerror/174953/1 "2009-09-04T16:09:18Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![adrianopol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/45deac/32.png) [@adrianopol](https://www.ruby-forum.com/u/adrianopol)\
**Post date:** [September 4, 2009, 4:14pm UTC](https://www.ruby-forum.com/t/libxml-ruby-how-to-handle-xml-parseerror/174953/2 "2009-09-04T16:14:35Z")

</div>

On Sep 4, 2:41 pm, adrianopol [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![adrianopol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/45deac/32.png) [@adrianopol](https://www.ruby-forum.com/u/adrianopol)\
**Post date:** [September 4, 2009, 4:19pm UTC](https://www.ruby-forum.com/t/libxml-ruby-how-to-handle-xml-parseerror/174953/3 "2009-09-04T16:19:51Z")

</div>

OK, so, how should I handle this exception?

On Sep 4, 6:12 pm, Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![adrianopol](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/45deac/32.png) [@adrianopol](https://www.ruby-forum.com/u/adrianopol)\
**Post date:** [September 4, 2009, 8:34pm UTC](https://www.ruby-forum.com/t/libxml-ruby-how-to-handle-xml-parseerror/174953/4 "2009-09-04T20:34:33Z")

</div>

Documentation ([http://libxml.rubyforge.org/rdoc/classes/LibXML/XML/](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.
