Bug in XML_Tree when parsing XML files

From: Date: Wed, 01 May 2002 20:54:33 +0000
Subject: Bug in XML_Tree when parsing XML files
Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-5940@lists.php.net to get a copy of this message
Was testing XML_Tree parsing some files from the PHPDOC directory (the PHP Documentation in cvs.php.net/cvs.php/phpdoc), and found out a really nasty bug that makes this class less than useful. It seems like XML_Tree (or XML_Parser, I had not isolated the problem), just misses content when parsing the files. I used the following code: === testTree.php === require_once "XML/Tree.php"; // change to wherever you have checked out phpdoc $phpdoc = "/home/jesus/devel/php/phpdoc/"; $entities = "entities/global.ent"; $file = "en/language/control-structures.xml"; $xmlarr = file($phpdoc.$file); $entarr = file($phpdoc.$entities); $doctype = '<!DOCTYPE chapter PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.4/EN" "http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd" [ '.implode("",$entarr)."\n]>\n"; $xmltop = $xmlarr[0]; $xmlbody = implode("",array_slice($xmlarr,1)); $xmldoc = $xmltop.$doctype.$xmlbody; //echo $xmldoc; $tree = new XML_Tree(); $root = $tree->getTreeFromString($xmldoc); //$root->dump(); print_r($root); === end === And when I run it, I get bits like (when commenting out $root->dump()): === $root->dump() === ... <sect1 id="function.include-once"> <title> <function> include_once</function> </title> <para> <function> The include_once</function> <function>include</function> </para> ... === end === When echoing $xmldoc above, that same section looks like: === echo $xmldoc; === ... <sect1 id="function.include-once"> <title><function>include_once</function></title> <para> The <function>include_once</function> statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the <function>include</function> statement, with the only difference being that if the code from a file has already been included, it will not be included again. As the name suggests, it will be included just once. </para> ... === end === Clearly something went terribly wrong while parsing or constructing the tree. Adding the code below assured me that the xml parsing lib (expat) was not the one messing up: === extra code === $xml = xml_parser_create(); xml_parse_into_struct($xml, $xmldoc, &$vals, &$index); xml_parser_free($xml); print_r($vals); === end === That bit of code got the content OK. I think that a thorough revision of XML_Tree and/or XML_Parser is warranted. Will submit this as a bug report too later. ===== --- Jesus M. Castagnetto (jcastagnetto@yahoo.com) Research: http://metallo.scripps.edu/ Personal: http://www.castagnetto.org/ __________________________________________________ Do You Yahoo!? Yahoo! Health - your guide to health and wellness http://health.yahoo.com

« previous php.pear.dev (#5940) next »