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

Как echo xml файл в php

Как распечатать xml файл на экране в php?

Это не работает:

$curl = curl_init();        
curl_setopt ($curl, CURLOPT_URL, 'http://rss.news.yahoo.com/rss/topstories');   
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   
$result = curl_exec ($curl);   
curl_close ($curl);    
$xml = simplexml_load_string($result);
echo $xml;

Есть ли простое решение? Может быть, без SimpleXML?

4b9b3361

Ответ 1

Вы можете использовать URL-адреса HTTP, как если бы они были локальными файлами, благодаря обертки PHP

Вы можете получить содержимое с URL-адреса через file_get_contents(), а затем повторить его или даже прочитать непосредственно с помощью файла readfile()

$file = file_get_contents('http://example.com/rss');
echo $file;

или

readfile('http://example.com/rss');

Не забудьте установить правильный тип MIME, прежде чем выводить что-либо.

header('Content-type: text/xml');

Ответ 2

Вот что сработало для меня:

<pre class="prettyprint linenums">
    <code class="language-xml"><?php echo htmlspecialchars(file_get_contents("example.xml"), ENT_QUOTES); ?></code>
</pre>

Использование htmlspecialchars предотвратит отображение тегов как html и ничего не сломает. Обратите внимание, что я использую Prettyprint, чтобы выделить код;)

Ответ 3

Вы можете использовать метод asXML

echo $xml->asXML();

Вы также можете указать имя файла

$xml->asXML('filename.xml');

Ответ 4

Я упрощаю это?

$location = "http://rss.news.yahoo.com/rss/topstories";
print file_get_contents($location);

Некоторые места (например, digg.com) не позволят вам получить доступ к их сайту без использования пользовательского агента, и в этом случае вам нужно будет установить это с помощью ini_set() перед запуском file_get_contents().

Ответ 5

Если вы просто хотите распечатать необработанный XML, вам не нужен Simple XML. Я добавил некоторые обработки ошибок и простой пример того, как вы можете использовать SimpleXML.

<?php 
$curl = curl_init();        
curl_setopt ($curl, CURLOPT_URL, 'http://rss.news.yahoo.com/rss/topstories');   
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   
$result = curl_exec ($curl);   

if ($result === false) {
    die('Error fetching data: ' . curl_error($curl));   
}
curl_close ($curl);    

//we can at this point echo the XML if you want
//echo $result;

//parse xml string into SimpleXML objects
$xml = simplexml_load_string($result);

if ($xml === false) {
    die('Error parsing XML');   
}

//now we can loop through the xml structure
foreach ($xml->channel->item as $item) {
    print $item->title;   
}

Ответ 6

Это сработало для меня:

echo(header('content-type: text/xml'));

Ответ 7

Чтобы отобразить html/xml "как есть" (т.е. все сущности и элементы), просто избегайте символов <, & и приложите результат с помощью < предварительно > :

$XML = '<?xml version="1.0" encoding="UTF-8"?>
<root>
    <foo>ó</foo>
    <bar>&#xF3;</bar>
</root>';

$XML = str_replace('&', '&amp;', $XML);
$XML = str_replace('<', '&lt;', $XML);
echo '<pre>' . $XML . '</pre>';

Печать

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <foo>ó</foo>
    <bar>&#xF3;</bar>
</root>

Протестировано на Chrome 45

Ответ 8

Если кто-то нацелен на yahoo rss-канал, может извлечь выгоду из этого фрагмента

<?php
    $rssUrl="http://news.yahoo.com/rss/topstories";
    //====================================================
    $xml=simplexml_load_file($rssUrl) or die("Error: Cannot create object");
    //====================================================
    $featureRss =  array_slice(json_decode(json_encode((array) $xml ),  true ), 0 );
 /*Just to see what is in it 
use this function PrettyPrintArray() 
instead of var_dump($featureRss);*/

    function PrettyPrintArray($rssData, $level) {
    foreach($rssData as $key => $Items) {
    for($i = 0; $i < $level; $i++)
    echo("&nbsp;");
    /*if content more than one*/
    if(!is_array($Items)){
    //$Items=htmlentities($Items); 
    $Items=htmlspecialchars($Items);
    echo("Item " .$key . " => " . $Items . "<br/><br/>");
    }
    else 
    {
    echo($key . " => <br/><br/>");
    PrettyPrintArray($Items, $level+1);
    }
    }
    }
    PrettyPrintArray($featureRss, 0);
?>

Вы можете сначала запустить его в своем браузере, чтобы увидеть, что есть, и перед тем, как зациклиться и создать его довольно просто.

Чтобы получить первое описание элемента

<?php
    echo($featureRss['channel']['item'][0]['description']);
?>

Здесь вы можете увидеть демо