Edit report at http://bugs.php.net/bug.php?id=53393&edit=1

 ID:                 53393
 Updated by:         rricha...@php.net
 Reported by:        paul dot visco at roswellpark dot org
 Summary:            XPath path issue with namespaced elements created
                     with DOMDocument
-Status:             Open
+Status:             Bogus
 Type:               Bug
 Package:            DOM XML related
 Operating System:   CENTOS 5.5/Fedora 14
 PHP Version:        5.3.3
 Block user comment: N
 Private report:     N

 New Comment:

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

must use dom level 2 namespace aware methods


Previous Comments:
------------------------------------------------------------------------
[2010-11-24 04:01:43] paul dot visco at roswellpark dot org

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 this bug report at http://bugs.php.net/bug.php?id=53393&edit=1

Reply via email to