带xPath的simplexml_load_file返回空数组

时间:2014-04-08 07:25:00

标签: xpath simplexml

this网址获取XML:

$xml = simplexml_load_file('http://geocode-maps.yandex.ru/1.x/?geocode=37.71677,55.75208&kind=metro&spn=1,1&rspn=1');

print_r($xml)显示已加载XML,但xpath始终返回空数组。我试过了:

$xml->xpath('/');
$xml->xpath('/ymaps');
$xml->xpath('/GeoObjectCollection');
$xml->xpath('/ymaps/GeoObjectCollection');
$xml->xpath('//GeoObjectCollection');
$xml->xpath('precision');

为什么我得到空阵列?希望我错过了一些简单的事情。

1 个答案:

答案 0 :(得分:2)

这可能相当容易,但我想这也是XML历史上最常见的错误:你忘记了名称空间!

给定XML中的许多元素正在更改默认命名空间,您必须在XPath中考虑这一点。

您可以首先注册您的命名空间:

$xml->registerXPathNamespace('y', 'http://maps.yandex.ru/ymaps/1.x');
$xml->registerXPathNamespace('a', 'http://maps.yandex.ru/attribution/1.x');

然后您可以查询您的数据:

$xml->xpath('//y:ymaps/y:GeoObjectCollection');