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

 ID:                 53181
 Updated by:         [email protected]
 Reported by:        ivan dot enderlin at hoa-project dot net
 Summary:            XPath bugs when selecting attributes with namespace
-Status:             Open
+Status:             Bogus
 Type:               Bug
 Package:            *XML functions
 PHP Version:        Irrelevant
 Block user comment: N

 New Comment:

That's an issue in libxml2. PHP uses libxml2, but we don't develop it.
No need to duplicate the entry.



Will ping one of the dev to see what's going on there.


Previous Comments:
------------------------------------------------------------------------
[2010-10-27 11:54:46] ivan dot enderlin at hoa-project dot net

Description:
------------
XPath (and possibly libxml2) has a bug when selecting attributes with a
namespace. We must use the namespace-uri() function to solve this
problem whereas using a registered prefix does not work.



A bug has been reported to Gnome in 2008:
<https://bugzilla.gnome.org/show_bug.cgi?id=562557> but it's still
opened and not resolved.

Test script:
---------------
<?php



$xml = '<?xml version="1.0" encoding="utf-8"?>' . "\n\n" .

       '<foo xmlns="http://ns1"; xmlns:x="http://ns2";>' . "\n" .

       '  <bar a="b" x:c="d" e="f" g="h" />' . "\n" .

       '</foo>';



$sxe = simplexml_load_string($xml);



$sxe->registerXPathNamespace('',  'http://ns1');

$sxe->registerXPathNamespace('x', 'http://ns2');



echo $xml . "\n\n" .

     '✘ //@*                                 found(' .

     count($sxe->xpath('//@*')) . ')' . "\n" .

     '✘ //@x:* (x registered as http://ns2)  found(' .

     count($sxe->xpath('//@x:*')) . ')' . "\n" .

     '✔ //@*[namespace-uri() = "http://ns2";] found(' .

     count($sxe->xpath('//@*[namespace-uri() = "http://ns2";]')) . ')' .
"\n";

Expected result:
----------------
<?xml version="1.0" encoding="utf-8"?>



<foo xmlns="http://ns1"; xmlns:x="http://ns2";>

  <bar a="b" x:c="d" e="f" g="h" />

</foo>



✘ //@*                                 found(4)

✘ //@x:* (x registered as http://ns2)  found(1)

✔ //@*[namespace-uri() = "http://ns2";] found(1)

Actual result:
--------------
<?xml version="1.0" encoding="utf-8"?>



<foo xmlns="http://ns1"; xmlns:x="http://ns2";>

  <bar a="b" x:c="d" e="f" g="h" />

</foo>



✘ //@*                                 found(4)

✘ //@x:* (x registered as http://ns2)  found(4)

✔ //@*[namespace-uri() = "http://ns2";] found(1)


------------------------------------------------------------------------



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

Reply via email to