Поиск и замена значений в файле KML

1

Я очень новичок в php, так что легко на меня.

Я пытаюсь выполнить поиск в файле KML для значений широты и долготы, а затем заменить их на введенные пользователем значения lat/long. Проблема, с которой я столкнулась, - это поиск в файле KML, чтобы найти конкретные значения lat/long, которые нужно заменить.

KML:

<?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">
<Folder>
    <name>Folder-Name</name>
    <open>1</open>
    <gx:Tour>
        <name class="name">Tour-Name</name>
        <gx:Playlist>
            <gx:FlyTo>
                <LookAt>
                    <gx:horizFov>100</gx:horizFov>
                    <longitude class="lookat-long">33.33333</longitude>
                    <latitude class="lookat-lat">-111.11111</latitude>
                    <altitude>0</altitude>
                    <heading>0</heading>
                    <tilt>60</tilt>
                    <range>100</range>
                    <altitudeMode>relativeToGround</altitudeMode>
                </LookAt>
            </gx:FlyTo>
        </gx:Playlist>
    </gx:Tour>
</Folder>
</kml>

Мне нужно заменить "33.33333" и "-111.11111" с введенными пользователем значениями. Я пробовал использовать SimpleXML, но он не распознает gx: часть тега, так как это специфический KML, а не часть XML. Поэтому, когда я пробую этот код:

<?php
    $xml = simplexml_load_file('my_kml_file');
    print_r($xml)
?>

Я получаю этот вывод:

SimpleXMLElement Object ( [Folder] => SimpleXMLElement Object ( [name] => Temporary Places [open] => 0 ) )    

Он просто останавливается на <open> потому что он не распознает остальных. Я потратил часы на часы, пытаясь понять, как лучше всего это сделать, и я просто не могу. Пожалуйста помоги.

Теги:
kml
simplexml

1 ответ

0
Лучший ответ

Вы можете использовать метод xpath, чтобы получить узел с именами следующим образом:

$xml = simplexml_load_file('my_kml_file');
$xml->xpath('//gx:Tour/gx:Playlist/gx:FlyTo')[0]->LookAt->longitude = 'newValue';
$xml->xpath('//gx:Tour/gx:Playlist/gx:FlyTo')[0]->LookAt->latitude = 'newValue';
print_r($xml->asXml());

Вывод:

<?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">
<Folder>
    <name>Folder-Name</name>
    <open>1</open>
    <gx:Tour>
        <name class="name">Tour-Name</name>
        <gx:Playlist>
            <gx:FlyTo>
                <LookAt>
                    <gx:horizFov>100</gx:horizFov>
                    <longitude class="lookat-long">newValue</longitude>
                    <latitude class="lookat-lat">newValue</latitude>
                    <altitude>0</altitude>
                    <heading>0</heading>
                    <tilt>60</tilt>
                    <range>100</range>
                    <altitudeMode>relativeToGround</altitudeMode>
                </LookAt>
            </gx:FlyTo>
        </gx:Playlist>
    </gx:Tour>
</Folder>
</kml>
  • 0
    Это определенно шаг в правильном направлении, но теперь, как мне отредактировать только значения lat / long из этого?
  • 0
    @TeaBoneJones Обновил мой ответ. Есть лучшие способы справиться с этим, но я думаю, что это дает вам правильное представление о том, как это сделать :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню