我試圖從我生成的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。
謝謝。
嘗試'/ kml/Document/ExtendedData/Data/value' ... – 2011-04-13 15:10:02
就我所見,該文件中沒有名稱空間。那麼你爲什麼要加載和配置名稱空間?爲什麼不把它作爲一個普通的非名稱空間文檔呢? – ircmaxell 2011-04-13 15:14:47
我想你應該註冊命名空間URI'http:// www.opengis.net/kml/2.2'。依靠surce前綴並不是一個好習慣。 – 2011-04-13 15:33:45