Извлечь данные XML в 2d массив

Мне было интересно, может ли кто-нибудь помочь мне.

У меня есть файл KML (Google Maps 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-файл будет содержать несколько точек, поэтому мне нужно сделать это автоматически.

Любая помощь могла бы быть полезна.

Спасибо

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);

Пример вывода

1

Другие решения

Вы можете использовать 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 );

2

По вопросам рекламы [email protected]