PHP Как получить атрибуты из XML

128
29 декабря 2020, 23:30

Есть код для формирования XML:

<?php
    include ('выбор.html');
    $coord = "";
    $data = "";
    if (isset($_POST['submit'])){
        include ($_POST['files']);
        $kml = new SimpleXMLElement($xmlstr);
        echo '<plaintext>';
        foreach ($kml->Document->Folder->Placemark as $Placemark) {
             $coord = $Placemark->MultiGeometry->Polygon->outerBoundaryIs->LinearRing->coordinates;
             $name = $Placemark->ExtendedData->SchemaData->SimpleData->attributes()->name;
echo '<Placemark>
    <description>';
            echo $name;
            Echo '</description>
        <styleUrl>#fillColor:ed454366_strokeColor:793d0ee6_strokeWidth:2</styleUrl>
            <Polygon>
                <outerBoundaryIs>
                    <LinearRing>
                        <coordinates>';
        echo $coord;
        echo '</coordinates>
                    </LinearRing>
                </outerBoundaryIs>
            </Polygon>
        </Placemark>';
        }
}
?>

XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <kml xmlns="http://www.opengis.net/kml/2.2">
    <Document id="root_doc">
    <Folder><name>6</name>
      <Placemark>
        <ExtendedData><SchemaData schemaUrl="#6">
            <SimpleData name="TITLE">г.Солигорск, ул.Октябрьская,25</SimpleData>
            <SimpleData name="VISIBLE">1</SimpleData>
            <SimpleData name="DESCRIPTIO">ЖЭС-6</SimpleData>
            <SimpleData name="TYPEID">0</SimpleData>
            <SimpleData name="SHAPE_Leng">553.00108356300</SimpleData>
            <SimpleData name="SHAPE_Area">15164.38080050000</SimpleData>
        </SchemaData></ExtendedData>
          <MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>27.5294768971866,52.7932506626974 27.5290725654772,52.7931310488117 27.5286866492311,52.7935653401639 27.5286862993214,52.7935657631828 27.5285590884608,52.7937183052913 27.5286502674621,52.7937507342637 27.5283551708913,52.7940913728134 27.5284276005954,52.7941121112508 27.5285118158128,52.7941040015074 27.5289502303265,52.7942374467774 27.5296709681812,52.7934368295137 27.5297880805909,52.7933031823304 27.5297026618576,52.7933121071567 27.5294768971866,52.7932506626974</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>
      </Placemark>
</Folder>
</Document>
</kml>

Тут пытаюсь получить значения атрибутов SimpleData : $name = $Placemark->ExtendedData->SchemaData->SimpleData->attributes()->name; Но в итоге получаю только название. т.е. TITLE подскажите как вытащить значение, а не название.

Answer 1
     foreach ($Placemark->ExtendedData->SchemaData->SimpleData as $SimpleData) {
        switch((string) $SimpleData['name']) { // Получение атрибутов элемента по индексу
        case 'TITLE':
            echo SimpleData;
            break;
        case 'DESCRIPTIO':
            echo $SimpleData;
            break;
        }
    }

Как то так. Не получалось сразу, т.к. не мог правильно сделать foreach

READ ALSO
Прикрепление файла в форме php

Прикрепление файла в форме php

Может кто-нибудь подскажет, как добавить в форму обратной связи, загрузку файла, чтобы этот файл на почту приходил вместе с заявкой?

140
Пробразовать массив

Пробразовать массив

Есть такой массив

129
Включить чекбоксы исходя из данных в файле

Включить чекбоксы исходя из данных в файле

Есть массив данных, полученный изini файла и переведенный в JSON, такого вида:

128
Функция implode php

Функция implode php

Есть код:

102