Доступ к пространству имен в XML для анализа правильных данных PHP / Laravel - PullRequest
0 голосов
/ 31 мая 2019

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

Кто-нибудь так любезен, чтобы помочь брату х

ссылка на xml = https://xml.inmobalia.com/361/e55d03759a1004da29b3e364faaff2e1.xml

например

<property>
    <descriptions>
        <property_desc lang="en">
        </property_desc>  
        <property_desc lang="es">
        </property_desc>  
    </descriptions>
</property>

PHP - вот что я пробовал

foreach ($data as $key => $val) {
    $filterd[$key]['main_advert_1'] = json_encode([
        "main_advert" => (isset($val['descriptions']['long_description']['en'])
            and !empty($val['descriptions']['long_description']['en'])
        )
        ? $val['descriptions']['long_description']['en'] : "N.A"]);
}

Ответы [ 3 ]

0 голосов
/ 31 мая 2019

Другое решение будет:

<?php

$xml = simplexml_load_file('https://xml.inmobalia.com/361/e55d03759a1004da29b3e364faaff2e1.xml')->children();
foreach ($xml->xpath('/properties/property') as $property) {
    echo '<h2>'.$property->reference->__toString().'</h2>';
    foreach ($property->xpath('descriptions/long_description[@lang="en"]') as $property) {
        echo $property->__toString();
    }
}

С помощью этого решения вы также можете получить доступ к другим деталям недвижимости.

0 голосов
/ 03 июня 2019

Я создал API, который потребляет и обслуживает XML, поэтому я знаю, как приятно использовать XML в PHP. / s

Я создал пакет, который имеет специальную поддержку Laravel для преобразования XML в обычный массив PHP. Он действительно прост в использовании и поставляется с глобально доступным помощником, если это ваша вещь. https://github.com/mtownsend5512/xml-to-array

Это даст вам легкий доступ к информации о пространстве имен в виде ключа массива @attributes. Так, например, чтобы получить самый первый длинный язык описания, вы можете сделать это:

$xml = file_get_contents('https://xml.inmobalia.com/361/e55d03759a1004da29b3e364faaff2e1.xml');
$result = xml_to_array($xml);
dd($result['property'][0]['descriptions']['long_description']);

И вы увидите @content и @attributes. Вы можете просто зациклить преобразованный XML, поскольку он представляет собой простой массив PHP.

0 голосов
/ 31 мая 2019

Не знаю, есть ли у Laravel свои собственные методы для работы с XML, но используя ванили DOMDocument и DOMXPath в PHP, это простая задача для извлечения нужных элементов.

Ниже загружена локально сохраненная копия данных XML - но вы можете использовать вместо этого URL в вызове $dom->load( $url ) и т. Д.

<?php
    $file='c:/wwwroot/files/xml/e55d03759a1004da29b3e364faaff2e1.xml';
    define('br','<br />');

    libxml_use_internal_errors( true );
    $dom=new DOMDocument;
    $dom->validateOnParse=false;
    $dom->recover=true;
    $dom->strictErrorChecking=false;
    $dom->load( $file );
    libxml_clear_errors();


    $xp=new DOMXPath( $dom );
    $col=$xp->query('//descriptions/long_description[@lang="en"]');

    if( $col->length > 0 ){
        foreach( $col as $node )echo $node->tagName . ' ' .$node->nodeValue . br;
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...