0

次のコードについて助けが必要です。XML ファイルから 2 つのノードを抽出し、それらを 1 つの配列に結合する必要があります。これが私のコードです。

$xml = file_get_contents('myKML.kml');
$dom = new DOMDocument;
$dom->loadXML($xml);
$coordi = $dom->getElementsByTagName('coordinates');

$coords = array();
foreach ($coordi as $coordinates) {
    $args = explode(",", $coordinates->nodeValue);
    $coords[] = array($args[0], $args[1], $args[2]);
}

print_r($coords);

今私は追加する必要があります$place = $dom->getElementsByTagName('name');

したがって、出力配列は次のようになります。

[名前,座標1,座標2], [名前,座標1,座標2], [名前,座標1,座標2]

4

1 に答える 1

0

最初に Xpath を使用して Placemark をクエリし、次に各 Placemark の名前と座標を取得します。ウィキペディアのサンプル KML を使用したソースを次に示します。

$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark>
  <name>New York City</name>
  <description>New York City</description>
  <Point>
    <coordinates>-74.006393,40.714172,0</coordinates>
  </Point>
</Placemark>
</Document>
</kml>
XML;

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('kml', 'http://www.opengis.net/kml/2.2');

$result = array();
$places = $xpath->evaluate('//kml:Placemark', NULL, FALSE);
foreach ($places as $place) {
  $result = array(
    'name' => $xpath->evaluate('string(kml:name)', $place, FALSE),
    'coords' => explode(
      ',', 
      $xpath->evaluate('string(kml:Point/kml:coordinates)', $place, FALSE),
      3
    )
  );
}

var_dump($result);

出力:

array(2) {
  ["name"]=>
  string(13) "New York City"
  ["coords"]=>
  array(3) {
    [0]=>
    string(10) "-74.006393"
    [1]=>
    string(9) "40.714172"
    [2]=>
    string(1) "0"
  }
}
于 2013-11-25T19:59:31.393 に答える