|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-04-22 14:44 UTC] 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.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 20:00:02 2025 UTC |
Example Script was provided with the original request, but I will add another one. <?php $ipAddr = "209.240.56.78"; $data = file_get_contents("http://api.hostip.info/?ip=".$ipAddr); $xml = @simplexml_load_string($data); print_r($xml); ?> You will notice that you will get no results from the print_r of $xml and there is no error message give. This was tested again with php version 5.3.2.The latest example script offered by nickmaccarthy works as expected. Nick, to see that the XML is received properly use: echo $xml->saveXML(); As for the original bug report, the reporter did not how to work with namespaces. This information is available in the documentation, see SimpleXMLElement::children().