2010-01-06 67 views
1

我正在嘗試訪問Google-picasa API的地理信息。這是原始的XML:SimpleXML:使用包含名稱空間的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; 

會給我沒有。有什麼顯而易見的,我做錯了嗎?

回答

4

您可以用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 [...]創建下一個XPath的前綴/ ns的背景下查詢

更多的方式來處理SimpleXML中的命名空間可以在這裏找到,例如:
Stuart Herbert On PHP - Using SimpleXML To Parse RSS Feeds

+0

謝謝,我得出了相同的結論 這工作$ geo = $ feed-> xpath('// gml:pos'); echo $ geo [0]; 也許另一種方式不能處理嵌套命名空間元素 – Richard 2010-01-06 18:14:55

+0

實際上,我拼錯了一些東西。$ geo-> point應該是$ geo->點 (大寫) – Richard 2010-01-06 19:28:22

0
echo $geo->pos[0]; 
+0

我已經try'd那也(不(字符串))? – Richard 2010-01-06 17:40:37

+1

此方法不會訪問名稱空間 – 2011-06-01 00:50:15

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; 
     } 
    } 
} 
相關問題