Comment faire écho au fichier xml en php
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?
9 réponses
Vous pouvez utiliser les URL HTTP comme s'il s'agissait de fichiers locaux, grâce aux wrappers de PHP
Vous pouvez obtenir le contenu d'une URL via file_get_contents (), puis le faire écho, ou même le lire directement en utilisant 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 sortir quoi que ce soit, cependant.
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>
L'utilisation de htmlspecialchars {[5] } empêchera l'affichage des balises en html et ne cassera rien. Notez que j'utilise Prettyprint pour mettre en évidence le code ;)
Vous pouvez utiliser la méthodeasXML
echo $xml->asXML();
Vous pouvez également lui donner un nom de fichier
$xml->asXML('filename.xml');
Est-ce que je simplifie trop?
$location = "http://rss.news.yahoo.com/rss/topstories";
print file_get_contents($location);
Certains endroits (comme digg.com) ne vous permettra pas d'accéder à leur site sans avoir un user-agent, auquel cas vous devrez le définir avec ini_set () avant d'exécuter file_get_contents ().
Si vous voulez juste imprimer le XML brut, vous n'avez pas besoin de XML Simple. J'ai ajouté une gestion des erreurs et un exemple simple de la façon dont vous pouvez 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'));
Pour afficher le html / xml " tel quel "(c'est-à-dire toutes les entités et tous les éléments), il suffit d'échapper les caractères , &, et enfermez le résultat avec :
$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 quelqu'un cible yahoo flux rss 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 pouvez l'exécuter dans votre navigateur d'abord pour voir ce qu'il y a et avant de boucler et de le styliser assez simple
Pour récupérer le premier élément description
<?php
echo($featureRss['channel']['item'][0]['description']);
?>
Cela fonctionne:
<?php
$XML = "<?xml version='1.0' encoding='UTF-8'?>
<!-- Your XML -->
";
header('Content-Type: application/xml; charset=utf-8');
echo ($XML);
?>