如何使用PHP解析XML

时间:2011-12-21 07:39:24

标签: php xml

我有这段代码

$xml = simplexml_load_file("http://api.hostip.info/?ip=12.215.42.19");
echo $xml->getName() . "<br />";
foreach($xml->children() as $child) {
    echo $child->getName() . ": " . $child . "<br />";
}

如果我直接在浏览器上访问http://api.hostip.info/?ip=12.215.42.19,我可以看到XML返回,但是当我尝试上面的代码时,只有HostipLookupResultSet<br />被回显。

如何从此xml中检索数据?我有兴趣获得国家和国家的缩写。

我正在尝试类似echo $xml->HostipLookupResultSet->gml:featureMember->Hostip->countryName的内容,但似乎这是错误的。

3 个答案:

答案 0 :(得分:3)

如果您query using xpath: -

,这可能会有效
// optional for register namespace into xpath
$xml->registerXPathNamespace('gml', 'http://www.opengis.net/gml');

$result = $xml->xpath('//*[self::countryName or self::countryAbbrev]');

答案 1 :(得分:1)

您需要添加命名空间。 请参阅下面的代码

/* @var $xml SimpleXMLElement */
echo $xml->getName() . "\n";
$namespaces = $xml->getDocNamespaces();

foreach($xml->children($namespaces['gml']) as $child) {
    echo $child->getName() . ": " . $child . "\n";
}

答案 2 :(得分:0)

You can try the following code for getting Country and Country Abbrevation:


$xml = simplexml_load_file("http://api.hostip.info/?ip=12.215.42.19");
$cntry= $xml->xpath('//gml:featureMember');

foreach($cntry as $child) {
    echo $child->Hostip->countryName;
echo "<br />";
echo $child->Hostip->countryAbbrev;
}