PHP - 使用simplexml_load_file获取XML的问题

时间:2010-12-17 16:43:48

标签: php xml file load simplexml

我在使用simplexml_load_file函数从文件中获取XML时遇到问题。我试过谷歌搜索,但其他人似乎有问题,当他们得到一个实际的错误或警告。我没有错误,也没有警告,但是当我这样做时:

$sims = simplexml_load_file("http://my-url.com/xml.php") or die("Unable to load XML file!");
var_dump($sims);

输出是:

object(SimpleXMLElement)#1 (1) {
  [0]=>
  string(1) "
"
}



但是,如果我这样做:

$ch = curl_init("http://my-url.com/xml.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

输出是:

<?xml version="1.0"?>
<simulators>
    <simulator>
        <mac>00-1A-4D-93-27-EC</mac>
        <friendlyName>a Travis Desk</friendlyName>
        <roundSessions>2</roundSessions>
        <rangeSessions>0</rangeSessions>
        <timePlayed>00:03:21</timePlayed>
    </simulator>
</simulators>


我通过这样做得到了它:

$ch = curl_init("http://my-url.com/xml.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

$sims = simplexml_load_string($output) or die("Unable to load XML file!");
var_dump($sims);

输出:

object(SimpleXMLElement)#1 (1) {
  ["simulator"]=>
  object(SimpleXMLElement)#2 (5) {
    ["mac"]=>
    string(17) "00-1A-4D-93-27-EC"
    ["friendlyName"]=>
    string(13) "a Travis Desk"
    ["roundSessions"]=>
    string(1) "2"
    ["rangeSessions"]=>
    string(1) "0"
    ["timePlayed"]=>
    string(8) "00:03:21"
  }
}

我只是想知道为什么第一种方法不起作用?我在Ubuntu Server 10.04上运行PHP版本5.3.2-1ubuntu4.5和libxml版本2.7.6。

谢谢!

-Travis

2 个答案:

答案 0 :(得分:1)

我认为这可能是因为您的xml内容位于.php扩展名文件中。您需要将http标头设置为xml。

header ("Content-type: text/xml");

在你负责吐出xml的php脚本中输出xml之前。 (“http://my-url.com/xml.php”中的那个)

http://www.satya-weblog.com/2008/02/header-for-xml-content-in-php-file.html

答案 1 :(得分:-1)

感谢您的快速回复。

@ajreal - 你走在正确的轨道上。事实证明,在查询字符串中我自己的愚蠢错误,由于某种原因,在通过cURL或浏览器调用它时起作用,但是不能通过simplexml_load_file工作。抱歉浪费你的时间!

-Travis