From: Operating system: CENTOS 5.5/Fedora 14 PHP version: 5.3.3 Package: DOM XML related Bug Type: Bug Bug description:XPath path issue with namespaced elements created with DOMDocument
Description: ------------ When creating a namespaced DOMDocument programmatically (appendChild, etc), I cannot get DOMXPath to return the same results on the same underlying XML document as I can when use DOMDocument->loadXML() to populate the documents XML. I compiled and tested the latest PHP 5.3.4RC2-dev (cli) (built: Nov 23 2010 21:51:46) using --with-dom and --with-xml and used the latest stable libxml2-devel.x86_64 2.7.7-2.fc14 from fedora 14 and the problem still persists. Sorry its like 25 lines of code with comments, I don't have somewhere else to put them. Test script: --------------- //Constructing the DOMDocument from XML string allows DOMXPath to work $xml = <<<EOT <?xml version="1.0" encoding="UTF-8"?> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:other="http://other.w3.org/other"><id>uYG7-sPwjFg</id><published>2009-05-17T18:29:31.000Z</published></entry> EOT; $doc = new DOMDocument; $doc->loadXML($xml); $xpath = new DOMXPath($doc); $xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom"); $entries = $xpath->evaluate('//atom:entry/atom:published/text()'); ///prints 2009-05-17T18:29:31.000Z as expected print $entries->item(0)->nodeValue ; //Constructing the same exact document programmatically causes DOMXPath to not work $doc = new DOMDocument("1.0", "UTF-8"); $entry = $doc->createElement('entry'); $doc->appendChild($entry); $entry->setAttribute('xmlns', "http://www.w3.org/2005/Atom"); $entry->setAttribute('xmlns:other', "http://other.w3.org/other"); $id = $entry->appendChild($doc->createElement('id'));; $id->appendChild($doc->createTextNode("uYG7-sPwjFg")); $published = $entry->appendChild($doc->createElement('published')); $published->appendChild($doc->createTextNode("2009-05-17T18:29:31.000Z")); $xpath = new DOMXPath($doc); $xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom"); $entries = $xpath->evaluate('//atom:entry/atom:published/text()'); //throws error as node is not found print $entries->item(0)->nodeValue; Expected result: ---------------- I would expect both of the above examples to print 2009-05-17T18:29:31.000Z Actual result: -------------- Example one prints 2009-05-17T18:29:31.000Z and example 2 fails because the node is not found by Xpath -- Edit bug report at http://bugs.php.net/bug.php?id=53393&edit=1 -- Try a snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=53393&r=trysnapshot52 Try a snapshot (PHP 5.3): http://bugs.php.net/fix.php?id=53393&r=trysnapshot53 Try a snapshot (trunk): http://bugs.php.net/fix.php?id=53393&r=trysnapshottrunk Fixed in SVN: http://bugs.php.net/fix.php?id=53393&r=fixed Fixed in SVN and need be documented: http://bugs.php.net/fix.php?id=53393&r=needdocs Fixed in release: http://bugs.php.net/fix.php?id=53393&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=53393&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=53393&r=needscript Try newer version: http://bugs.php.net/fix.php?id=53393&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=53393&r=support Expected behavior: http://bugs.php.net/fix.php?id=53393&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=53393&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=53393&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=53393&r=globals PHP 4 support discontinued: http://bugs.php.net/fix.php?id=53393&r=php4 Daylight Savings: http://bugs.php.net/fix.php?id=53393&r=dst IIS Stability: http://bugs.php.net/fix.php?id=53393&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=53393&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=53393&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=53393&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=53393&r=mysqlcfg