我试图从我生成的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