SimpleXML: работа с XML, содержащим пространства имен

Я пытаюсь добраться до геоинформации с API google-picasa. Это оригинальный XML:

<georss:where> <gml:Point> <gml:pos>35.669998 139.770004</gml:pos> </gml:Point> </georss:where> 

Я уже зашел так далеко, с:

 $ns_geo=$item->children($namespace['georss']); $geo=$ns_geo->children($namespace['gml']); 

var_dump($geo) выведет

 object(SimpleXMLElement)#34 (1) { ["Point"]=> object(SimpleXMLElement)#30 (1) { ["pos"]=> string(18) "52.373801 4.890935" } } 

но

 echo (string)$geo->position or (string)$geo->position->pos; 

ничего не даст. Есть ли что-то очевидное, что я делаю неправильно?

Related of "SimpleXML: работа с XML, содержащим пространства имен"

Вы можете работать с XPath и registerXPathNamespace() :

 $xml->registerXPathNamespace("georss", "http://www.georss.org/georss"); $xml->registerXPathNamespace("gml", "http://www.opengis.net/gml"); $pos = $xml->xpath("/georss:where/gml:Point/gml:pos"); 

Из документов, акцент мой:

registerXPathNamespace […] Создает префикс / ns-контекст для следующего запроса XPath .

Дополнительные способы обработки пространств имен в SimpleXML можно найти здесь, например:
Стюарт Герберт на PHP – Использование SimpleXML для анализа RSS-каналов

 echo $geo->pos[0]; 

Так я сделал это без использования xpath:

 $georss = $photo->children('http://www.georss.org/georss'); $coords; if($georss->count()>0) { $gml = $georss->children('http://www.opengis.net/gml'); if($gml->count()>0) { if(isset($gml->Point->pos)) { $coords = $gml->Point->pos; } } }