#48049 [Opn->Fbk]: Will not parse tags with certain chars

From: Date: Fri, 24 Apr 2009 13:48:30 +0000
Subject: #48049 [Opn->Fbk]: Will not parse tags with certain chars
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-136206@lists.php.net to get a copy of this message
ID: 48049 Updated by: jani@php.net Reported By: nickmaccarthy at gmail dot com -Status: Open +Status: Feedback Bug Type: SimpleXML related Operating System: Ubuntu 8.04 PHP Version: 5.2.9 New Comment: Thank you for this bug report. To properly diagnose the problem, we need a short but complete example script to be able to reproduce this bug ourselves. A proper reproducing script starts with <?php and ends with ?>, is max. 10-20 lines long and does not require any external resources such as databases, etc. If the script requires a database to demonstrate the issue, please make sure it creates all necessary tables, stored procedures etc. Please avoid embedding huge scripts into the report. Previous Comments: ------------------------------------------------------------------------ [2009-04-22 14:44:53] nickmaccarthy at gmail dot com Description: ------------ Note: SimpleXML has issues parsing tags with ":" in it. GML tags for example are formatted like: <gml:name>Foo</gml:name>. In the SimpleXML Documentation, it states to put tags between {} that could contain chars. that could break the parser, like "-" for example. In our example below: $xml->firstLayer->secondLayer->{'gml:name'} will not be parsed by SimpleXML, but SimpleXML will NOT throw an error or lead you to believe that it has NOT parsed it. I was parsing output from hostip.info which uses XML as an output with GML. Here is an example of the XML I was working with when I cam a Reproduce code: --------------- --- From manual page: book.simplexml --- $ipAddr = "209.240.56.78"; $data = file_get_contents("http://api.hostip.info/?ip=".$ipAddr); $xml = @simplexml_load_string(str_replace(":", "_", $data)); //SimpleXML has issues parsing the ":", replacing it with underscore to make this work. $city = $xml->gml_featureMember->Hostip->gml_name; $country = $xml->gml_featureMember->Hostip->countryName; $country_abbrev = $xml->gml_featureMember->Hostip->countryAbbrev; $lat_long = $xml->gml_featureMember->Hostip->ipLocation->gml_PointProperty->gml_Point->gml_coordinates; echo $city Expected result: ---------------- This is what XML looks like coming from the site: <HostipLookupResultSet version="1.0.0" xmlns="http://www.hostip.info/api" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hostip.info/api/hostip-1.0.0.xsd"> <gml:description>This is the Hostip Lookup Service</gml:description> <gml:name>hostip</gml:name> <gml:boundedBy> <gml:Null>inapplicable</gml:Null> </gml:boundedBy> <gml:featureMember> <Hostip> <gml:name>(Unknown City?)</gml:name> <countryName>(Unknown Country?)</countryName> <countryAbbrev>XX</countryAbbrev> <!-- Co-ordinates are unavailable --> </Hostip> </gml:featureMember> </HostipLookupResultSet> Based on my echo of $city, I would expect to see: Providence RI Actual result: -------------- Blank - nothing. SimpleXML will not throw an error if it runs into an issue parsing anything with a ":" in the tag. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=48049&edit=1

« previous php.bugs (#136206) next »