Проблема с разбором некоторых элементов из файла KML - PullRequest
1 голос
/ 13 апреля 2011

У меня проблема с попыткой разобрать биты данных с помощью PHP из файла KML, который я сгенерировал и затем отправил на мой веб-сервер. Я хочу вывести элементы и сохранить их в базе данных. Хранить их не проблема, просто вывести некоторые элементы.

Вот пример файла KML, который я пытаюсь проанализировать:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
    <Document>
        <name>RandomName</name>
        <description>-</description>
        <Style id="line">
            <LineStyle>
            <color>CD0000FF</color>
            <width>4</width>
            </LineStyle>
        </Style>
        <ExtendedData>
            <Data name="StartTime">
                <value>1302653118875</value>
            </Data>
            <Data name="EndTime">
                <value>1302653159274</value>
            </Data>
            <Data name="Type">
                <value>cycle</value>
            </Data>
        </ExtendedData>

    <Placemark>
        <name>PlaceName2</name>
        <description><p>Current Altitude: <b>0.0 ft</b><br/>Current Speed: <b>0.0 m/s</b><br/>Total Distance: <b>0.608 km</b></p></description>
        <styleUrl>#line</styleUrl>
        <LineString>
            <extrude>1</extrude>
            <tessellate>1</tessellate>
            <coordinates>
            -122.083393,37.427768,0.0
            -122.084395,37.427768,0.0
            </coordinates>
        </LineString>
    </Placemark>
</Document>
</kml>

Я использую следующий код и могу получить самое первое имя и описание.

function getTrackDescription($file){
    $xml = simplexml_load_file($file);
    $namespace = $xml->getDocNamespaces();

    if(isset($namespace[""])){
        $xml->registerXPathNamespace("default",$namespace[""]);
    }

    $element= $xml->xpath('//default:description');
    return $element[0];
}

Я могу получить эти элементы, но когда я пытаюсь получить что-то еще, я просто ничего не получаю. Мне нужно иметь доступ к значениям в ExtendedData - StartTime, EndTime и Type. Мне также нужно получить описание из метки.

Я изменил 1 строку из приведенного выше кода, пытаясь получить StartTime, но он не работает.

$element= $xml->xpath('//default:ExtendedData/Data[name="StartTime"]/value');

Если бы кто-нибудь мог мне помочь или указать мне правильное направление, я был бы очень рад, потому что я не слишком много использовал XML.

Спасибо.

1 Ответ

0 голосов
/ 14 апреля 2011

Поскольку вы определили префикс для пространства имен "http://www.opengis.net/kml/2.2", вы должны убедиться, что используете его для всех элементов, попадающих в это пространство имен. В приведенном выше коде вы по существу ищете ExtendedData с префикс default, но затем ищем Data в другом месте пространства имен без префикса.

Вот ваши варианты:

$xml = simplexml_load_file($file);
var_dump($xml->xpath("//ExtendedData/Data[@name='StartTime']/value"));

или

$xml = simplexml_load_file($file);
$xml->registerXPathNamespace("default","http://www.opengis.net/kml/2.2");
var_dump($xml->xpath("//default:ExtendedData/default:Data[@name='StartTime']/default:value"));

Оба должны вернуть предметы, на которые вы надеетесь.

...