2009-07-29 69 views
26

如何在php中將xml文件打印到屏幕上?如何在php中回顯xml文件

這不是工作:

$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?

+1

XML是基於字符串的格式。 SimpleXML將XML轉換爲PHP對象以便於在PHP中進行操作。 如果要顯示XML,只需回顯XML字符串,並且像上面提到的那樣,不要忘記添加正確的HTTP響應頭。這是指示HTTP客戶端將文件視爲XML文件。 – bucabay 2009-07-29 12:28:36

回答

49

您可以使用HTTP網址,就好像它們是本地文件,這要歸功於PHP's wrappers

你可以從一個URL通過的file_get_contents()的內容,然後呼應它,甚至可以直接使用ReadFile的閱讀()

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

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

不要忘記outputing任何東西之前設置正確的MIME類型,雖然。

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

要回顯HTML文件中的XML內容,我必須使用 `echo htmlentities($ file)` 以顯示原始XML(標記和內容)。有沒有更好的辦法? – AnAurelian 2016-03-09 16:56:34

4

我是不是簡單化了這個?

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

運行的file_get_contents之前,一些地方(如digg.com)不會讓你無需用戶代理訪問他們的網站,在這種情況下,你需要設置與函數ini_set()( )。

+0

這有效,但在* some * CDATA malarky上失敗。 – 2012-01-09 21:31:27

5

可以使用asXML方法

echo $xml->asXML(); 

你也可以給它一個文件名

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

這是否添加標題? `header('Content-type:text/xml');` – EndermanAPM 2017-06-23 10:55:35

4

如果你只想打印原始的XML你不需要簡單的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; 
} 
11

下面是我工作:

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

使用htmlspecialchars將防止標籤被顯示爲HTML,也不會破壞任何東西。請注意,我使用Prettyprint突出代碼;)

3

這爲我工作:

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

確認這在一個非常大的xml文檔上工作。 – cartalot 2016-05-21 23:28:22

3

顯示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> 

測試在鉻45

+0

使用它,它對我很好。 +1 – 2018-03-05 04:38:00

0

如果有人針對雅虎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']); 
?> 

You can see a demo here