SimpleXML不会解析这个URL

时间:2016-11-29 13:04:44

标签: php xml simplexml

我正在为WordPress开发一个插件,以便从基于云的POS提供的XML输出中读取。

这不是复杂的编程,这更像是一个调试。

XML网址为:已删除:)

基本的简单代码是:    <?php    error_reporting(E_ALL);    ini_set('display_errors', true);    $url = '--URL to the XM--L';     $xml=simplexml_load_file($url);     print_r($xml);     ?>

我尝试了所有的方法。 DOMDoc,CURL和SimpleXML。一切都吐出错误。制作输出的编码器能够使其在其域内工作,但我需要调试更多以找出错误的位置。

我遇到了很多错误,具体取决于我如何将XML提供给脚本。

Fatal error: Uncaught Exception: String could not be parsed as XML in /var/www/html/test2.php:27 Stack trace: #0 /var/www/html/test2.php(27): SimpleXMLElement->__construct('http://jewelbas...', NULL, true) #1 {main} thrown in /var/www/html/test2.php on line 27

有时我会得到这些奇怪的支持错误,我认为这些错误来自他们的主机,但他们无法识别它们。无论我使用什么服务器,都会出现这些支持错误。他们在使用simplexml_load_string()

时会来

Warning: simplexml_load_string(): act the webmaster. <br><br>Your support ID is: 9641638103684613562</body></html>

2 个答案:

答案 0 :(得分:0)

服务器需要设置用户代理。 PHP中的所有标准XML API都基于libxml。您可以为它设置流上下文:

libxml_set_streams_context(
  stream_context_create(
    [
      'http' => [
        'header'=>
          "User-Agent: Foo\r\n"
      ]
    ]
  )
);

$document = new DOMDocument();
$document->load($url);
echo $document->saveXML();

答案 1 :(得分:0)

正是为了后代才能看到,这里是完整的代码,现在以一种很好的格式解析XML。

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
$url = 'http://sample.com/yourphpxmlfile.php?variables=rule';
$feed = $url;
$options = array(
'http' => array(
'method' => "GET",
'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\r\n" // Chrome v24
  )
);
$context = stream_context_create($options);
$content = new SimpleXMLElement(file_get_contents($feed, false, $context));
echo "<pre>";
print_r($content);
echo "</pre>";
?>