2016-10-17 2 views
0

У меня есть .kml файл формы, как это:Как получить конкретный тег в KML-файле, используя php DOMDocument?

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> 
<Document> 
    <name>myFile.shp</name> 
    <Style id="style1"> 
     <PolyStyle> 
      <color>ff00ff00</color> 
     </PolyStyle> 
    </Style> 
    <Folder id="layer 0"> 
     <name>background</name> 
     <Placemark> 
      <styleUrl>#style1</styleUrl> 
      <LineString> 
       <coordinates> 
        -2.94040373,54.83409343483 -2.943834733,54.893839393 
       </coordinates> 
      </LineString> 
     </Placemark> 
     </Folder> 
</Document> 
</kml> 

Вопрос

Как я могу получить этот файл как DOMDocument и получить ALL тег элемент с именем "координатами" ?

Цель состоит в том, чтобы иметь возможность получить координаты, даже если изменение формы файла, как, например:

<kml xmlns="http://earth.google.com/kml/2.0"> 
    <Folder> 
    <name>OpenLayers export</name> 
    <description>No description available</description> 
    <Placemark> 
     <name>OpenLayers.Feature.Vector_7341</name> 
     <description>No description available</description> 
     <Polygon> 
     <outerBoundaryIs> 
      <LinearRing> 
      <coordinates> 
       -2.94040373,54.83409343483 -2.943834733,54.893839393 
      </coordinates> 
      </LinearRing> 
     </outerBoundaryIs> 
     </Polygon> 
    </Placemark> 
    </Folder> 
</kml> 

Моих попыток было Переберите документ с помощью simplexml_load_file(), но к сожалению, я не был бы надежным поскольку «порядок тегов» изменяется между этими двумя документами, и я не знаю, почему он не следует за одним шаблоном (который заставляет меня задавать этот вопрос, потому что он может иметь более 2-х форм для KML? исправьте меня, если я неправильно).

+0

Почему вы не используете регулярные выражения? Таким образом, вам не нужно полагаться на порядок элементов. – Dez

+0

Звучит умная идея, нужно попробовать. Я даю вам знать. –

+0

Решение regexp тоже работало, но я предпочитаю, чтобы синтаксический анализатор разбивал мой файл на теги и перемещался по ним, а не открывался для проблемы с регулярным выражением. В любом случае спасибо @Dez за ваш вклад. –

ответ

1

Используйте класс DOMDocument для анализа XML. Затем используйте getElementsByTagName(), чтобы получить все coordinates элементов.

$dom = new DOMDocument(); 
// load file 
$dom->load("file.kml"); 
// get coordinates tag 
$coordinates = $dom->getElementsByTagName("coordinates"); 
foreach($coordinates as $coordinate){ 
    echo $coordinate->nodeValue; 
} 
+0

Протестировано с моими и разными структурированными файлами, теперь я могу получить рекурсивные теги «координат». –

Смежные вопросы