Comment imprimer un fichier XML à l'écran en php?
Cela ne fonctionne pas:
$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;
Y-a-t-il une solution simple? Peut-être sans SimpleXML?
Vous pouvez utiliser les URL HTTP comme s'il s'agissait de fichiers locaux, grâce à les wrappers de PHP
Vous pouvez obtenir le contenu d'une URL via file_get_contents () et ensuite l'échanger ou même le lire directement avec readfile ()
$file = file_get_contents('http://example.com/rss');
echo $file;
ou
readfile('http://example.com/rss');
N'oubliez pas de définir le type MIME correct avant de générer quoi que ce soit.
header('Content-type: text/xml');
Voici ce qui a fonctionné pour moi:
<pre class="prettyprint linenums">
<code class="language-xml"><?php echo htmlspecialchars(file_get_contents("example.xml"), ENT_QUOTES); ?></code>
</pre>
Utiliser htmlspecialchars empêchera les balises de s’afficher en tant que html et ne cassera rien. Notez que j'utilise Prettyprint pour mettre le code en surbrillance;)
Vous pouvez utiliser la méthode asXML
echo $xml->asXML();
Vous pouvez aussi lui donner un nom de fichier
$xml->asXML('filename.xml');
Suis-je trop simplifier cela?
$location = "http://rss.news.yahoo.com/rss/topstories";
print file_get_contents($location);
Certains endroits (comme digg.com) ne vous autoriseront pas à accéder à leur site sans agent utilisateur. Dans ce cas, vous devrez le définir avec ini_set () avant d'exécuter file_get_contents ().
Pour afficher le code html/xml "tel quel" (c'est-à-dire toutes les entités et tous les éléments), échappez simplement les caractères <, & et mettez le résultat entre <pre> :
$XML = '<?xml version="1.0" encoding="UTF-8"?>
<root>
<foo>ó</foo>
<bar>ó</bar>
</root>';
$XML = str_replace('&', '&', $XML);
$XML = str_replace('<', '<', $XML);
echo '<pre>' . $XML . '</pre>';
Impressions:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<foo>ó</foo>
<bar>ó</bar>
</root>
Testé sur Chrome 45
Si vous voulez simplement imprimer le XML brut, vous n'avez pas besoin de XML simple. J'ai ajouté quelques erreurs de traitement et un exemple simple de la façon dont vous pourriez utiliser 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;
}
Cela a fonctionné pour moi:
echo(header('content-type: text/xml'));
Si quelqu'un cible yahoo rss feed peut bénéficier de cet extrait
<?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(" ");
/*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);
?>
Vous voudrez peut-être d'abord l'exécuter dans votre navigateur pour voir ce qu'il y a avant de le mettre en boucle et le styliser assez facilement
Pour saisir la première description de l'article
<?php
echo($featureRss['channel']['item'][0]['description']);
?>
Cela marche:
<?php
$XML = "<?xml version='1.0' encoding='UTF-8'?>
<!-- Your XML -->
";
header('Content-Type: application/xml; charset=utf-8');
echo ($XML);
?>