Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как получить все элементы XML?

Как получить все элементы XML?


     21.11.2022    Все вопросы » Общие вопросы по PHP    542

вопрос
Здравствуйте.

Есть XML-файл формате яндекс https://www.bashinform.ru/rss/yandex.xml
Есть код:
$url = file_get_contents('https://www.bashinform.ru/rss/yandex.xml');
$data = simplexml_load_string($url,'SimpleXMLElement',LIBXML_NOCDATA|LIBXML_NOBLANKS);
print_r($data);
В массив $data не попадают элементы с именами, в которых есть двоеточие, например:
<yandex:full-text>...</yandex:full-text
<turbo:content>...</turbo:content>
Подскажите пожалуйста, что можно сделать, чтобы в массиве были ВСЕ элементы?

Ответа пока нет


5 комментариев

web102
Юзер

web102 - 21 ноября 2022 12:32 -

Пока додумался только до этого:
$url = str_replace('yandex:full-text', 'full-descrition', $url);

lutskboy
Эксперт

dj-avtosh
PHP-developer

dj-avtosh - 23 ноября 2022 11:11 -

В интернетах ваших подсказывают:


$path = 'https://www.bashinform.ru/rss/yandex.xml';

$ctx = stream_context_create([
  'http' => array('timeout' => 6)
]);

$file = file_get_contents($path, 0, $ctx);

if ($file)
{
    $rss = simplexml_load_string($file);

    foreach ($rss->channel->item as $item)
    {
        $namespaces = $item->getNameSpaces(true);
        $yandex = $item->children($namespaces['yandex']);
        $full_text = (string) $yandex->{'full-text'};
        echo $full_text;
    }
}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

web102
Юзер

web102 - 23 ноября 2022 15:12 -

Спасибо. Но это все-таки немного не то...

dj-avtosh
PHP-developer

dj-avtosh - 24 ноября 2022 18:41 -

накостылил:

$path = 'https://www.bashinform.ru/rss/yandex.xml';

$ctx = stream_context_create([
  'http' => array('timeout' => 6)
]);

$file = file_get_contents($path, 0, $ctx);

if ($file)
{
    $data = simplexml_load_string($file);

    foreach ($data->channel->item as $item)
    {

        $namespaces = $item->getNameSpaces(true);

        if( !empty ($namespaces) )
        {

            foreach($namespaces as $namespacesKey => $namespacesValue)
            {

                $namespacesData = $item->children($namespaces[$namespacesKey]);

                foreach($namespacesData as $namespacesDataKey => $namespacesDataValue)
                {
                    $item->{$namespacesKey . ':' . $namespacesDataKey} = $namespacesDataValue;
                }

            }
        }

    }

    $data->asXml();

}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх