2014-02-18 32 views
0

我使用以下加載存儲在不同的服務器上的遠程XML文件..cURL加載跨域遠程XML - 如何讀取和格式化?

<?php $curl = curl_init(); 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_URL, "http://pathtofile.com/data.xml"); 

$xml = curl_exec($curl); 

curl_close($curl); 
?> 

正如你所看到的,結果被存儲在$ XML字符串。

我可以通過使用broswer顯示此:

<?php echo $xml; ?> 

但我需要選擇和數據格式的特定部分。

我知道這是可以做到的,而且我已經閱讀了大量關於如何通過xmlhttp和其他方式完成這些任務的文章,但是我無法找到特定於我的需求的方法,因爲我的XML文件現在基本上一個PHP字符串。

我同類的功能如下JS腳本後,我(如果XML文件被存儲在本地這會工作得很好,但像我是不是不工作):

<script> 
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.open("GET","http://pathtofile.com/data.xml",false); 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 

document.write("<table border='1'>"); 
var x=xmlDoc.getElementsByTagName("event"); 
for (i=0;i<x.length;i++) 
{ 
document.write("<tr><td>"); 
document.write(x[i].getElementsByTagName("date")[0].childNodes[0].nodeValue); 
document.write("</td><td>"); 
document.write(x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue); 
document.write("</td></tr>"); 
} 
document.write("</table>"); 
</script> 

有人可以指出我正確的方向或提供一個例子嗎?我只是不確定如何調用$ xml字符串以用於這種方式。

乾杯!

回答

0

一種方法是使用DOMDocument類來解析XML字符串並獲取節點值。

http://php.net/manual/en/domdocument.getelementsbytagname.php

示例#1應爲你工作,用於提取這樣的活動:

<?php 

$dom = new DOMDocument; 
$dom->loadXML($xml); 
$events = $dom->getElementsByTagName('event'); 
$rows = ''; 
foreach ($events as $event) { 
    $date = $name = ''; 
    foreach ($event->childNodes as $child) { 
     switch ($child->nodeName) { 
      case 'date': 
       $date = $child->nodeValue; 
      break; 
      case 'name': 
       $name = $child->nodeValue; 
      break; 
     } 
    } 
    $rows .= "<tr><td>${date}</td><td>${name}</td></tr>"; 
} 

echo 'test'.$rows; 

?> 

第二個解決辦法是XSL:

http://php.net/manual/en/xsl.examples-collection.php

創建模板您的需求並使用XSLTPRocessor類。

http://php.net/manual/en/xsltprocessor.construct.php