Edit report at http://bugs.php.net/bug.php?id=48049&edit=1
ID: 48049
Comment by: nickmaccarthy at gmail dot com
Reported by: nickmaccarthy at gmail dot com
Summary: Will not parse tags with certain chars
Status: No Feedback
Type: Bug
Package: SimpleXML related
Operating System: Ubuntu 8.04
PHP Version: 5.2.9
Block user comment: N
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[2009-05-02 01:00:00] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
------------------------------------------------------------------------
[2009-04-24 13:48:30] [email protected]
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.
------------------------------------------------------------------------
[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/bug.php?id=48049&edit=1