2014-10-27 70 views
1

我想知道如果有人能给我一只手。PHP - 将XML数据提取到二维数组

我有一个KML文件(谷歌地图XML),我需要将坐标提取到二维数组。

文件的格式如下:

<?xml version="1.0" encoding="UTF-8"?> 
<kml 
    xmlns="http://earth.google.com/kml/2.1"> 
    <Document> 
     <Placemark> 
      <name>Im a name</name> 
      <Point> 
       <coordinates>138.611798,-34.926053</coordinates> 
      </Point> 
     </Placemark> 
     <Placemark> 
      <name>Im a name</name> 
      <Point> 
       <coordinates>138.611798,-34.926053</coordinates> 
      </Point> 
     </Placemark> 
     <Placemark> 
      <name>Im a name</name> 
      <Point> 
       <coordinates>138.611798,-34.926053</coordinates> 
      </Point> 
     </Placemark> 
     [...] 

我需要能够按照下面的格式返回数组:

Array 
(
    [0] => Array 
     (
      [0] => 138.611798 
      [1] => -34.926053 
     ) 
    [1] => Array 
     (
      [0] => 138.611798 
      [1] => -34.926053 
     ) 

我的KML文件将包含相当多的分所以我需要能够自动执行此操作。

任何帮助将非常感激。

谢谢

+0

你可以看看http://php.net/manual/en/function.xml-parse-into-struct.php – 2014-10-27 10:46:55

回答

1

您可以使用SimpleXML获取所需的值并将它们推入数组中。例如:

$data = array(); 
$xml = simplexml_load_file('path/to/file.kml'); 
foreach($xml->Document->Placemark as $placemark) { 
    list($x, $y) = explode(',', $placemark->Point->coordinates); // explode coordinates by comma 
    $data[] = array($x, $y); 
} 

echo '<pre>'; 
print_r($data); 

Sample Output

+0

这工作太棒了,非常感谢你 – BigJobbies 2014-10-27 11:02:59

+0

@BigJobbies肯定我很高兴这有帮助 – Ghost 2014-10-27 11:03:14

2

您可以使用XPath为。只是不要忘记设置命名空间。

$xml = simplexml_load_file('kml.xml'); $xml->registerXPathNamespace('ns', 'http://earth.google.com/kml/2.1'); $names = $xml->xpath('//ns:coordinates'); $coordinates = array(); foreach($names as $name) { $coordinates[] = explode(',', $name); } print_r($coordinates);