Javascript cURL加载跨域远程XML-如何读取和格式化它?

Javascript cURL加载跨域远程XML-如何读取和格式化它?,javascript,php,xml,curl,Javascript,Php,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字符串中 我可以通过以

我使用以下命令加载存储在不同服务器上的远程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字符串以便以这种方式使用


干杯

一种方法是使用DOMDocument类来解析XML字符串并获取节点值

示例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:

根据需要创建模板并使用XSLTPRocessor类