ID: 27709 Updated by: [EMAIL PROTECTED] Reported By: fjortiz at comunet dot es -Status: Open +Status: Closed Bug Type: Feature/Change Request Operating System: Irrelevant PHP Version: 5.0RC3-dev New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. it's called registerXPathNamespace() Previous Comments: ------------------------------------------------------------------------ [2004-06-07 09:45:29] [EMAIL PROTECTED] Or use the xpath expression recommended by Rob "// *[local-name() = 'a']". It's a feature request. Reclassified. ------------------------------------------------------------------------ [2004-06-04 11:59:29] [EMAIL PROTECTED] This *is* a bug, SimpleXML does not provide a registerNamespace() method like the DOM XPath implementation does. Without this, the XPath implementation in SimpleXML is crippled. So its half a bug, and half a feature request. This *needs* to be added before 5.0 final IMO The only way I can get this to workright now is: $xml =<<<EOF <?xml version="1.0" ?> <xml xmlns="http://bar"> <child attribute="value1"> <morechildren /> <morechildren /> <morechildren /> <morechildren /> </child> </xml> EOF; $simple_xml = simplexml_load_string($xml); // Add a namespace with the same URI as the default $simple_xml['xmlns:bar'] = "http://bar"; // Reload the XML so the namespace is recognised $simple_xml = simplexml_load_string($simple_xml->asXML()); - Davey ------------------------------------------------------------------------ [2004-03-26 08:09:55] [EMAIL PROTECTED] 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 This is an XPath limitation. You need to use an expression like //*[local-name() = 'a'] or dont use default namespaces. ------------------------------------------------------------------------ [2004-03-26 04:51:30] fjortiz at comunet dot es Description: ------------ Hi, this example works with SimpleXML xpath: $string = <<<XML <?xml version="1.0" encoding ="UTF-8" ?> <a xmlns:ns="urn:1"> <b> <c>text</c> <c>stuff</c> </b> <d> <c>code</c> </d> </a> XML; $xml = simplexml_load_string($string); $res = $xml->xpath('//a'); // returns array(1) But if we don't use a namespace prefix (default namespace), xpath, returns an empty array, array(0), for any xpath search: $string = <<<XML <?xml version="1.0" encoding ="UTF-8" ?> <a xmlns="urn:1"> <b> <c>text</c> <c>stuff</c> </b> <d> <c>code</c> </d> </a> XML; $xml = simplexml_load_string($string); $res = $xml->xpath('//a'); // returns array(0) This is a simple example, I found the problem with a bigger XML file (a WSDL file). This WSDL has 5 namespaces defined, and no problem at all with SimpleXML, as long as you don't define a default namespace... Thanks for your attention ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=27709&edit=1
