Подтвердить что ты не робот

SimpleXML - предупреждение ввода-вывода: не удалось загрузить внешний объект

Я пытаюсь создать небольшое приложение, которое просто прочитает RSS-канал, а затем разместит информацию на странице.

Все инструкции, которые я нахожу, делают это упрощенным, но по какой-то причине он просто не работает. У меня есть следующие

include_once(ABSPATH.WPINC.'/rss.php');
$feed = file_get_contents('http://feeds.bbci.co.uk/sport/0/football/rss.xml?edition=int');
$items = simplexml_load_file($feed);

Что он, тогда он разрывается на третьей строке со следующей ошибкой

Error: [2] simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="UTF-8"?> <?xm
The rest of the XML file is shown.

Я включил allow_url_fopen и allow_url_include в моих настройках, но все равно ничего. Я пробовал несколько каналов, все из которых имеют одинаковый результат?

Я схожу с ума здесь

4b9b3361

Ответ 1

simplexml_load_file() интерпретирует XML файл (либо файл на вашем диске, либо URL-адрес) в объект. То, что у вас есть в $feed, является строкой.

У вас есть два варианта:

  • Используйте file_get_contents(), чтобы получить фид XML в виде строки и используйте e simplexml_load_string():

    $feed = file_get_contents('...');
    $items = simplexml_load_string($feed);
    
  • Загрузите XML-канал напрямую, используя simplexml_load_file():

    $items = simplexml_load_file('...');
    

Ответ 2

Вы также можете загрузить контент с помощью cURL, если на вашем сервере не включено file_get_contents.

Пример:

$ch = curl_init();  

curl_setopt($ch,CURLOPT_URL,"http://feeds.bbci.co.uk/sport/0/football/rss.xml?edition=int");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

$output = curl_exec($ch);

curl_close($ch);

$items = simplexml_load_string($output);

Ответ 3

это также работает:

$url = "http://www.some-url";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xmlresponse = curl_exec($ch);
$xml=simplexml_load_string($xmlresponse);

то я просто запустил forloop, чтобы захватить материал из узлов.

вот так: `

for($i = 0; $i < 20; $i++) {
$title = $xml->channel->item[$i]->title;
$link = $xml->channel->item[$i]->link;
$desc = $xml->channel->item[$i]->description;
$html .="<div><h3>$title</h3>$link<br />$desc</div><hr>";
}
echo $html;

*** обратите внимание, что ваши имена node будут отличаться, очевидно... и ваш HTML может быть структурирован по-другому... также ваш цикл может быть установлен на более высокий или меньший результат.

Ответ 4

$url = 'http://legis.senado.leg.br/dadosabertos/materia/tramitando';
$xml = file_get_contents("xml->{$url}");
$xml = simplexml_load_file($url);