DOM loadXML not loading doctype as expected in PHP5
| From: | David Numan | Date: | Tue, 31 Aug 2004 04:27:25 +0000 |
| Subject: | DOM loadXML not loading doctype as expected in PHP5 | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-195243@lists.php.net to get a copy of this message | ||
Hi
I'm working on a project using PHP5 and I'm using the DOM extension
quite heavily. I need to be able to store various character entities
such as $nbsp; and é Note: this is for a custom XML document, not
standard (X)HTML.
When I load my XML string into my domDocument I've been trying
variations of $doctype1 and $doctype2 below. Here is my code:
$doctype1 = <<<EODT
<!DOCTYPE page [
<!ENTITY % ISOlat1 PUBLIC "-//W3C//ENTITIES Latin1 for XHTML//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
%ISOlat1;
<!ENTITY % ISOsymbol PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
%ISOsymbol;
<!ENTITY % ISOspecial PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
%ISOspecial;
]>
EODT;
$doctype2 = '<!DOCTYPE page PUBLIC "-"
"http://gv.ca/dtd/character-entities.dtd">';
$xml = '<?xml version="1.0" encoding="UTF-8"?>'.$doctype1.
'<page> </page>';
$dom = new domDocument();
$dom->loadXML($xml);
echo $dom->saveXML();
The above code works as-is and the is present in the huge output.
However, when I change it to use $doctype2 the is no longer there
and returns the warning "Entity 'nbsp' not defined in Entity, line 1".
Of course the $doctype2 string is the one I need.
What am I doing wrong? Why isn't it loading the external entities? Is
there some other way of doing this that I somehow missed? I tested the
exact same xml code using "xmllint -format -loaddtd file.xml" and it
worked fine.
Tested on Gentoo with PHP 5.0.0 and 5.0.1 with libxml 2.6.11.
Any ideas would be appreciated.
Thanks,
--
David Numan <dave@guidedvision.com>