Чтение XML-канала с помощью PHP

У меня проблема с попыткой прочитать и проанализировать этот канал: Немного XML-фида

по какой-то причине функция SimpleXMLElement возвращает пустые узлы. Я использую file_get_contents для чтения URL-адреса, а затем SimpleXMLElement.

Вот пример:

<?php
// URL feed XML
$url = 'some xml feed';

$xml_content = file_get_contents($url);

if ($xml_content === false) {
    echo "No XML content.";
    exit;
}

// Parser the XML
$xml = new SimpleXMLElement($xml_content);


foreach ($xml->channel->item as $item) {
    $title = (string) $item->title;
    $id = (string) $item->{'cnn-article:id'};
    $description = (string) $item->description;

    // Hacer lo que necesites con los datos
    echo "Title: $title<br>";
    echo "ID: $id<br>";
    echo "Description: $description<br>";
}
?>

Конечно, я думаю, это моя версия PHP. Спасибо.

Andrés Gómez 21.02.2024 19:49

Без минимального воспроизводимого примера в самом вопросе сложно ответить правильно. Общие советы см. в разделе Справочник — Как обрабатывать пространства имен (теги и атрибуты с двоеточием в имени) в SimpleXML?

IMSoP 29.02.2024 11:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

SimpleXML в идеале не обрабатывает пространства имен XML (т. е. теги с двоеточиями), поэтому, к сожалению, вы не сможете этого сделать:

$id = (string) $item->{'cnn-article:id'};

У вас должна быть возможность получить поле, используя селектор Children() и передав истинное значение в качестве второго параметра:

$id = (string) $item->children('cnn-article', true)->id;

Или, возможно, если вы собираетесь использовать несколько полей в этом теге:

$cnn = $item->children('cnn-article', true);
$id = (string) $cnn->id;
$url = (string) $cnn->url;
$slug = (string) $cnn->slug;
$createdDate = (string) $cnn->{'created-date'};

если это так .. Почему сценарий ОП работает нормально в моей настройке php? Это правильно перекликается с TitleID и Description -- PHP 8.0 с libxml2 Version => 2.9.12

Zak 21.02.2024 18:30

Вывод, опубликованный в вашем комментарии, не включает идентификатор.

Alex Howansky 21.02.2024 19:13

Ааа, я вижу, что я там сделал… Я увидел <br> и пропустил тот факт, что там ничего не было — Приятно знать!

Zak 21.02.2024 19:29

Пример зависит от псевдонима/префикса пространства имен. Это необязательно и может измениться. Лучшее решение — использовать URI пространства имен. Найдите определение пространства имен xmlns:cnn-article. $cnn = $item->children('http://...', false);

ThW 22.02.2024 10:27

Другие вопросы по теме