Bug #16952 Updated: Bug when parsing XML file using XML_Tree

From: Date: Fri, 17 May 2002 12:20:47 +0000
Subject: Bug #16952 Updated: Bug when parsing XML file using XML_Tree
References: 1  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-6199@lists.php.net to get a copy of this message
ID: 16952 Updated by: cox@php.net Reported By: jmcastagnetto@php.net -Status: Analyzed +Status: Closed Bug Type: PEAR related Operating System: RH Linux 6.1 PHP Version: 4.2.0 Assigned To: cox New Comment: Ok, after some research time and a headache, I commited a fix for that. Please try it and tell me if the support is now correct. -- Tomas V.V.Cox Previous Comments: ------------------------------------------------------------------------ [2002-05-13 22:41:47] jmcastagnetto@php.net I am not sure about how libdomxml does the transversal, but here is the spec from W3C for transversal: http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html ------------------------------------------------------------------------ [2002-05-07 12:46:35] cox@php.net The current implementation I did does not support mixed XML contents (#PCDATA + elements). If someone could tell me how DOM represents that, I could try to fix this issue. This will be enought: <?php $xmlstr = " <root><child> This is a <tag bar="a">foo</tag> mixed example </child></root>"; print_r(domxml_xmltree($xmlstr)); ?> Thanks, Tomas V.V.Cox ------------------------------------------------------------------------ [2002-05-01 17:01:47] jmcastagnetto@php.net BTW, I am using the latest version of XML_Tree from the CVS tree (pear/XML_Tree), and the XML_Parser included w/ PHP 4.2.0 ------------------------------------------------------------------------ [2002-05-01 16:57:44] jmcastagnetto@php.net 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. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=16952&edit=1

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