SimpleXMLElement - 无法将字符串解析为XML

时间:2014-05-19 13:05:19

标签: php xml simplexml

我在加载外部XML文件时遇到问题。

当我在浏览器中打开它时,一切看起来都很好。我尝试下载XML文件并将其上传到我自己的服务器上。当我尝试从我的服务器加载XML文件时,一切都运行良好。

有人可以帮我解决这个问题,以便我可以从外部服务器加载它吗?

我的代码:

$oXML_cz = new SimpleXMLElement(file_get_contents('http://www.ticketportal.cz/xml/temp/partnerall1.xml?ID_partner=122'));
foreach ($oXML_cz->event as $event_cz)
{
      ......
}

3 个答案:

答案 0 :(得分:1)

解决方案是尝试CURL:

function download_page($path){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$path);
    curl_setopt($ch, CURLOPT_FAILONERROR,1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $retValue = curl_exec($ch);          
    curl_close($ch);
    return $retValue;
}

$sXML = download_page('http://www.domain.com/file.xml');
$oXML_cz = new SimpleXMLElement($sXML);

foreach($oXML_cz->event as $event_cz)
{
   ...
}

感谢您的回答;)

答案 1 :(得分:0)

检查allow_url_fopen的配置。可以在this question中找到更多提示。

答案 2 :(得分:0)

这个库的错误没有太多记录。问题可能是由于XML文件过大而不是xml结构合规性/完整性。

例如,一旦解析,15MB文件可能会推断1GB,因此ini_set('memory_limit', '1024M');可能无效。

在上面的情况中,我通过在xml声明/加载期间包含LIBXML_PARSEHUGE参数来解决问题。

$xml = new SimpleXMLElement($contents, LIBXML_PARSEHUGE);