2011-04-13 139 views
1

我試圖從我生成的KML文件中使用PHP解析出數據位,然後將其發送到我的網絡服務器。我想獲取元素,並將它們存儲到數據庫中。存儲它們不是問題,它只是獲取一些元素。從KML文件中解析某些元素的問題

這裏是連接例如KML文件即時試圖解析的:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
    <Document> 
     <name>RandomName</name> 
     <description>-</description> 
     <Style id="line"> 
      <LineStyle> 
      <color>CD0000FF</color> 
      <width>4</width> 
      </LineStyle> 
     </Style> 
     <ExtendedData> 
      <Data name="StartTime"> 
       <value>1302653118875</value> 
      </Data> 
      <Data name="EndTime"> 
       <value>1302653159274</value> 
      </Data> 
      <Data name="Type"> 
       <value>cycle</value> 
      </Data> 
     </ExtendedData> 

    <Placemark> 
     <name>PlaceName2</name> 
     <description><p>Current Altitude: <b>0.0 ft</b><br/>Current Speed: <b>0.0 m/s</b><br/>Total Distance: <b>0.608 km</b></p></description> 
     <styleUrl>#line</styleUrl> 
     <LineString> 
      <extrude>1</extrude> 
      <tessellate>1</tessellate> 
      <coordinates> 
      -122.083393,37.427768,0.0 
      -122.084395,37.427768,0.0 
      </coordinates> 
     </LineString> 
    </Placemark> 
</Document> 
</kml> 

我用下面的代碼,我能夠走出最初的名稱和說明。

function getTrackDescription($file){ 
    $xml = simplexml_load_file($file); 
    $namespace = $xml->getDocNamespaces(); 

    if(isset($namespace[""])){ 
     $xml->registerXPathNamespace("default",$namespace[""]); 
    } 

    $element= $xml->xpath('//default:description'); 
    return $element[0]; 
} 

我能夠得到這些元素,但當我試圖獲得其他任何東西時,我什麼也得不到。我需要能夠訪問ExtendedData中的值 - StartTime,EndTime和Type。我還需要從Placemark獲得描述。

我改變了上面代碼中的1行,試圖獲取StartTime,但它不起作用。

$element= $xml->xpath('//default:ExtendedData/Data[name="StartTime"]/value'); 

如果任何人都可以幫助我,或者指出我朝着正確的方向,我會非常感謝,因爲我沒有真正使用過XML。

謝謝。

+0

嘗試'/ kml/Document/ExtendedData/Data/value' ... – 2011-04-13 15:10:02

+0

就我所見,該文件中沒有名稱空間。那麼你爲什麼要加載和配置名稱空間?爲什麼不把它作爲一個普通的非名稱空間文檔呢? – ircmaxell 2011-04-13 15:14:47

+0

我想你應該註冊命名空間URI'http:// www.opengis.net/kml/2.2'。依靠surce前綴並不是一個好習慣。 – 2011-04-13 15:33:45

回答

0

由於您已經爲名稱空間「http://www.opengis.net/kml/2.2」定義了前綴,因此您必須確保您將它用於所有落入該名稱空間的元素。在上面的代碼中,您基本上正在尋找ExtendedData,前綴爲default,但隨後在名稱空間中的其他地方查找沒有前綴的Data

這裏是你的選擇:

$xml = simplexml_load_file($file); 
var_dump($xml->xpath("//ExtendedData/Data[@name='StartTime']/value")); 

$xml = simplexml_load_file($file); 
$xml->registerXPathNamespace("default","http://www.opengis.net/kml/2.2"); 
var_dump($xml->xpath("//default:ExtendedData/default:Data[@name='StartTime']/default:value")); 

雙方應返回你希望的項目。

+0

+1好抓! – 2011-04-14 22:22:55