Помогите вытащить инфу с xml в php

133
21 декабря 2020, 08:00

Есть файл с xml структурой:

    <?php
    $xmlstr = <<<XML
    <?xml version="1.0" encoding="utf-8" ?>
    <kml xmlns="http://www.opengis.net/kml/2.2">
    <Document id="root_doc">
    <Schema name="6" id="6">
        <SimpleField name="TITLE" type="string"></SimpleField>
        <SimpleField name="VISIBLE" type="float"></SimpleField>
        <SimpleField name="DESCRIPTIO" type="string"></SimpleField>
        <SimpleField name="IMAGE_URL" type="string"></SimpleField>
        <SimpleField name="IMAGE_LINK" type="string"></SimpleField>
        <SimpleField name="DATE" type="string"></SimpleField>
        <SimpleField name="TYPEID" type="float"></SimpleField>
        <SimpleField name="SHAPE_Leng" type="float"></SimpleField>
        <SimpleField name="SHAPE_Area" type="float"></SimpleField>
    </Schema>
    <Folder><name>6</name>
      <Placemark>
        <Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
        <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>
XML;
?>

Получаю значения coordinates и SimpleData:

    <?php
include ('наша.php');
$kml = new SimpleXMLElement($xmlstr);
foreach ($kml->Document->Folder->Placemark as $Placemark){
foreach ($kml->Document->Folder->Placemark->MultiGeometry->Polygon->outerBoundaryIs->LinearRing as $LinearRing) {
    echo $LinearRing->coordinates, PHP_EOL;
}
foreach ($kml->Document->Folder->Placemark->ExtendedData->SchemaData as $SchemaData) {
    foreach($SchemaData as $SimpleData) {
        $name = $SimpleData->attributes()->name;
        if ($name == 'TITLE' || $name == 'DESCRIPTIO') {
            echo '<pre>';
            echo $SimpleData . PHP_EOL;
            echo '</pre>';
        }
    }
}
}
?>

В результате получаю первый SimpleData и coordinates как мне получить все либо отдельные например title и descriptio SimpleData из Placemark, а не только первый?

Answer 1
<?php
include ('example.php');
$kml = new SimpleXMLElement($xmlstr);
foreach ($kml->Document->Folder->Placemark->MultiGeometry->Polygon->outerBoundaryIs->LinearRing as $LinearRing) {
    echo $LinearRing->coordinates, PHP_EOL;
}
foreach ($kml->Document->Folder->Placemark->ExtendedData->SchemaData as $SchemaData) {
    foreach($SchemaData as $SimpleData) {
        $name = $SimpleData->attributes()->name;
        if ($name == 'TITLE' || $name == 'DESCRIPTIO') {
            echo $SimpleData->attributes()->name . PHP_EOL;
            echo $SimpleData . PHP_EOL;
        }
    }
}
?>

Ответ на дополнение:

<?php
include ('example.php');
$kml = new SimpleXMLElement($xmlstr);
foreach ($kml->Document->Folder->Placemark as $Placemark) {
    foreach ( $Placemark->MultiGeometry->Polygon->outerBoundaryIs->LinearRing as $LinearRing ) {
        echo $LinearRing->coordinates, PHP_EOL;
    }
    foreach ( $Placemark->ExtendedData->SchemaData as $SchemaData ) {
        foreach ( $SchemaData as $SimpleData ) {
            $name = $SimpleData->attributes()->name;
            if ( $name == 'TITLE' || $name == 'DESCRIPTIO' ) {
                echo $SimpleData->attributes()->name . PHP_EOL;
                echo $SimpleData . PHP_EOL;
            }
        }
    }
}
?>
READ ALSO
Передача данных из jsp формы JAVA

Передача данных из jsp формы JAVA

Имеется jsp-страница, где создается форма для заполнения текстом и форма-кнопка, которая при нажатии должна отправлять на другую jsp содержимое...

143
Работа InputMethodListener

Работа InputMethodListener

Работаю с javaswing и не могу никак понять какое назначение следующих слушателей

115
Как подключить DLL C# в проекте на Java?

Как подключить DLL C# в проекте на Java?

Нужно подключить написанную на c# dll в проекте на javaБыло бы не плохо если показали рабочий пример

124
Композиция и наследование

Композиция и наследование

Что такое композиция, и как она связана с наследованием? Какие преимущества она имеет перед последним? Какие подводные камни имеет этот приём?

116