# Parsing xhtml with libxml

**URL:** <https://www.ruby-forum.com/t/parsing-xhtml-with-libxml/50493>\
**Category:** Ruby\
**Created:** [December 17, 2005, 12:19am UTC](https://www.ruby-forum.com/t/parsing-xhtml-with-libxml/50493 "2005-12-17T00:19:41Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![hotjuneshen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/f19dbf/32.png) [@hotjuneshen](https://www.ruby-forum.com/u/hotjuneshen)\
**Post date:** [December 17, 2005, 12:19am UTC](https://www.ruby-forum.com/t/parsing-xhtml-with-libxml/50493/1 "2005-12-17T00:19:41Z")

</div>

If you get errors complaining of undefined entities like &nbsp; when  
parsing xhtml it means you need to install the DTD for xhtml 1.0 or  
1.1.

Example of a doctype for xhtml 1.1:

You want to install the DTDs locally following the model in /etc/xml.  
If you don’t libxml will fetch the DTD from [www.w3.org](http://www.w3.org) each time you  
parse a document. Needing to install these DTDs was not obvious to me  
and should be part of the documentation. There a rpm for xhtml 1.0 -  
“xhtml1-dtds-1.0-7”. I couldn’t find one for xhtml 1.1 so I downloaded  
it piecemeal from [w3.org](http://w3.org).

Installing the DTD does not automatically turn on validation. If you  
want to validate you need to turn it on:  
XML::Parser::default\_validity\_checking = TRUE

XML::Parser::default\_load\_external\_dtd controls the loading of the  
‘external subset’ (the definition for the character entities like  
&. It is defaulted to TRUE.

XML::Parser::default\_load\_external\_dtd is broken. This fixes it.

# Index: ruby\_xml\_parser.c

## RCS file: /var/cvs/xml-tools/libxml-ruby/ruby\_xml\_parser.c,v retrieving revision 1.1.1.1 diff -r1.1.1.1 ruby\_xml\_parser.c 274c274 \< if (xmlSubstituteEntitiesDefaultValue)

> if (xmlLoadExtDtdDefaultValue)  
> 916c916  
> \<  
> ruby\_xml\_parser\_default\_load\_external\_dtd\_set, 0);

* * *

> ```
> ruby_xml_parser_default_load_external_dtd_get, 0);
> 
> ```

## 918c918 \< ruby\_xml\_parser\_default\_load\_external\_dtd\_get, 1);

> ```
> ruby_xml_parser_default_load_external_dtd_set, 1);
> 
> ```

Sam’s patches for libxml are also needed:  
[http://www.intertwingly.net/blog/2005/11/05/Patch-for-libxml2s-Ruby-binding](http://www.intertwingly.net/blog/2005/11/05/Patch-for-libxml2s-Ruby-binding)

---

<div class="post-metadata">

**Author:** ![hotjuneshen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/f19dbf/32.png) [@hotjuneshen](https://www.ruby-forum.com/u/hotjuneshen)\
**Post date:** [December 17, 2005, 12:42am UTC](https://www.ruby-forum.com/t/parsing-xhtml-with-libxml/50493/2 "2005-12-17T00:42:29Z")

</div>

Jon S. wrote:

> If you get errors complaining of undefined entities like &nbsp; when  
> parsing xhtml it means you need to install the DTD for xhtml 1.0 or  
> 1.1.
> 
> Example of a doctype for xhtml 1.1:
> 
> \<snip explanation & code due to [ruby-forum.com](http://ruby-forum.com) /\>
> 
> Sam’s patches for libxml are also needed:  
> [Patch for libxml2's Ruby binding](http://www.intertwingly.net/blog/2005/11/05/Patch-for-libxml2s-Ruby-binding)

Thank you for this!

## E

This document is NOT valid XHTML 1.0!

---

<div class="post-metadata">

**Author:** ![hotjuneshen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/f19dbf/32.png) [@hotjuneshen](https://www.ruby-forum.com/u/hotjuneshen)\
**Post date:** [December 17, 2005, 1:13am UTC](https://www.ruby-forum.com/t/parsing-xhtml-with-libxml/50493/3 "2005-12-17T01:13:55Z")

</div>

On Fri, 16 Dec 2005 23:18:54 -0000, Jon S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> If you get errors complaining of undefined entities like &nbsp; when  
> parsing xhtml it means you need to install the DTD for xhtml 1.0 or  
> 1.1.

Thanks for that. I’ve been gathering up problems and patches in a quiet  
sort of way, but I’m not sure at the moment what’s happening with the  
project. I’m planning to get proactive this week and see if we can at  
least get these issues sorted and the patches I have (including yours  
and  
Sam’s) in.

Thanks,  
Ross
