如何用php解析外部XML文件(从POST返回)?

时间:2010-01-04 18:35:07

标签: php xml parsing

我编写了一个简单的代码(基于互联网上的一些教程)来解析和显示XML文件。但是,我只知道如何引用存储在我的服务器上的XML文件,并且我希望能够使用从POST返回给我的XML文件。

现在我的代码看起来像这样:

if( ! $xml = simplexml_load_file('test.xml') )
{
    echo 'unable to load XML file';
}
else
{
    foreach( $xml as $event)
    {
        echo 'Title: ';
        echo "<a href=\"$event->url\">$event->title</a><br />";
        echo 'Description: '.$event->info.'<br />';
        echo '<br />';
    }
} 

是否有某种方法可以将simpleXML_load_file函数替换为允许我指向返回XML文件的POST URL的函数?

4 个答案:

答案 0 :(得分:3)

使用simplexml_load_string而不是loadfile:

 simplexml_load_string($_POST['a']);

如果你在POST中获得文件的url,你可以使用带有url的simplexml_load_file函数,但如果这不起作用,你可以将file_get_contents与simplexml_load_string一起使用:

//say $_POST['a'] == 'http://example.com/test.xml';
simplexml_load_file($_POST['a']); // <-- propably works
simplexml_load_string(file_get_contents($_POST['a'])); //<-- defenitly works (propaly what happens internally)

在安全模式下运行PHP也可以禁止获取外部文件的内容。

答案 1 :(得分:2)

如果您收到的是用户上传的文件,您可以找到(文件)查看$_FILES超全局变量的内容 - 您可以阅读有关文件上传的更多信息here (例如,如果您不希望在请求结束时删除文件,请不要忘记调用move_uploaded_file

然后,您可以使用与未上传文件相同的方式处理此文件。


如果您收到XML字符串,则可以使用simplexml_load_string


如果您只收到远程XML内容的URL,则必须:

  • 将文件下载到您的服务器
  • 然后解析其内容。

如果您的服务器配置正确(即如果启用了allow_url_fopen),则可以使用simplexml_load_file将URL作为参数来完成。

否则,必须使用curl进行下载 - 请参阅curl_exec获取一个非常基本的示例,并curl_setopt了解您可以使用的选项(您特别需要使用CURLOPT_RETURNTRANSFER,将XML数据作为字符串传递给simplexml_load_string)。

答案 2 :(得分:1)

来自http://www.developershome.com/wap/wapUpload/wap_upload.asp?page=php4

  

如果你不想保存   直接上传文件但要处理   它,PHP的功能   file_get_contents()和fread()可以   帮你。 file_get_contents()   function返回一个字符串   包含上传的所有数据   文件:

if (is_uploaded_file($_FILES['myFile']['tmp_name']))
  $fileData = file_get_contents($_FILES['myFile']['tmp_name']);

这将为您提供该文件中原始文本的句柄。从那里你需要解析XML。希望有所帮助!

答案 3 :(得分:0)

结帐simplexml_load_string。然后,您可以使用cURL来发布帖子并获取结果。一个例子:

<?php
$xml = simplexml_load_string($string_fetched_with_curl);
?>