【问题标题】:SimpleXMLElement - string could not be parsed as XMLSimpleXMLElement - 无法将字符串解析为 XML
【发布时间】:2014-05-19 13:05:18
【问题描述】:

我在加载外部 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)
{
      ......
}

【问题讨论】:

  • 您在下面的评论中提到您可以使用file_get_contents 获取其他远程文件,这是排除的重要可能性。您还尝试了哪些其他步骤来调试此问题?例如,如果您回显file_get_contents('http://www.ticketportal.cz/xml/temp/partnerall1.xml?ID_partner=122') 的内容,您会得到预期的XML 吗?您在尝试运行此处发布的代码时收到的确切错误消息是什么?
  • 如果我回显,它会返回:[function.file-get-contents]:打开流失败:HTTP 请求失败!
  • 啊哈!那么,这是一个重要的发现,不是吗?这意味着这与将其解析为 XML 无关,而与能够从您的服务器访问该 URL 无关。因此,可能值得尝试一些获取文件的替代方法(例如 CURL)并查看它们是否至少会给您带来更具表现力的错误。
  • 另外,需要明确的是,该消息不是echo 的结果,即使在您之前的代码中也应该显示。您是否确定您的error logging or display is turned up to the max 以确保捕获所有消息?
  • 是的,它有帮助...我使用了 CURL,现在一切正常。感谢您的帮助!

标签: php xml simplexml


【解决方案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)
{
   ...
}

感谢您的回答;)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这不是问题,因为我正在从其他服务器加载 XML 文件并且它正在工作......
    【解决方案3】:

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

    例如,一旦解析,15MB 的文件可能外推 1GB,所以ini_set('memory_limit', '1024M'); 可能无效。

    在上述情况下,我通过在 xml 声明/加载期间包含 LIBXML_PARSEHUGE 参数解决了这个问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多