hostip.info - Разобрать ответ API с помощью SimpeXML

Я пытаюсь разобрать xml-ответ http://api.hostip.info/?ip=12.215.42.19 с SimpleXML, но я не могу заставить его работать.

Ответ

<?xml version="1.0" encoding="ISO-8859-1" ?>
<HostipLookupResultSet version="1.0.1" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.hostip.info/api/hostip-1.0.1.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>
   <ip>12.215.42.19</ip>
   <gml:name>Sugar Grove, IL</gml:name>
   <countryName>UNITED STATES</countryName>
   <countryAbbrev>US</countryAbbrev>
   <!-- Co-ordinates are available as lng,lat -->
   <ipLocation>

    <gml:pointProperty>
     <gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
      <gml:coordinates>-88.4588,41.7696</gml:coordinates>
     </gml:Point>
    </gml:pointProperty>
   </ipLocation>
  </Hostip>
 </gml:featureMember>

</HostipLookupResultSet>

Может ли кто-нибудь помочь мне получить доступ, например, к Hostip> ipLocation> pointProperty> Point> координаты

Заранее спасибо!


person n00b    schedule 28.01.2011    source источник
comment
возможный дубликат SimpleXML: работа с XML, содержащим пространства имен   -  person Gordon    schedule 28.01.2011
comment
отлично, думаю, это поможет :)   -  person n00b    schedule 28.01.2011


Ответы (2)


Вот два способа (которые доступны в другом месте на SO путем поиска!).

XPath (очень простой способ продемонстрировать)

$coords = $xml->xpath('//gml:coordinates');
echo $coords[0];

«Простой» XML (не такой уж и простой)

echo $xml
    ->children('gml', TRUE)->featureMember
    ->children('', TRUE)->Hostip->ipLocation
    ->children('gml', TRUE)->pointProperty->Point->coordinates;
person salathe    schedule 28.01.2011

Вы можете получить доступ к таким атрибутам, как массив http://www.electrictoolbox.com/php-simplexml-element-attributes/ как (я не уверен в вашем примере)

Hostip->ipLocation->gml['pointproperty']
person osm    schedule 28.01.2011
comment
OP не пытается получить атрибут, а в связанной статье не рассматривается, как получать элементы с пространством имен. - person Gordon; 28.01.2011