У меня проблема с попыткой прочитать и проанализировать этот канал: Немного 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>";
}
?>
Без минимального воспроизводимого примера в самом вопросе сложно ответить правильно. Общие советы см. в разделе Справочник — Как обрабатывать пространства имен (теги и атрибуты с двоеточием в имени) в SimpleXML?






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
Вывод, опубликованный в вашем комментарии, не включает идентификатор.
Ааа, я вижу, что я там сделал… Я увидел <br> и пропустил тот факт, что там ничего не было — Приятно знать!
Пример зависит от псевдонима/префикса пространства имен. Это необязательно и может измениться. Лучшее решение — использовать URI пространства имен. Найдите определение пространства имен xmlns:cnn-article. $cnn = $item->children('http://...', false);
Конечно, я думаю, это моя версия PHP. Спасибо.