警告:simplexml_load_file()[function.simplexml加载文件]:xml/xml_tes


Warning: simplexml_load_file() [function.simplexml-load-file]: xml/xml_test.php:5: parser error : Start tag expected, '<' not found

我知道有人问过很多这样的问题,我读过很多答案,但仍然不断出错。出于测试目的,我创建了一个简单的版本,并得到了与主脚本相同的错误。我相信这很简单,但我已经和它斗争了好几个小时,而且我正在为此而脱发。

在PHP中生成的演示XML文件(这个文件是静态的,以模拟我的真实文件生成的内容,对这个文件的测试得到了以下错误):

<?php
header("Content-type: text/xml");
print "<?xml version='"1.0'" encoding='"UTF-8'"?>";
echo "
<users>
<user>
<search_tkID>5</search_tkID>
<search_connection>1</search_connection>
<search_name>Daniel Appleseed</search_name>
<search_pic>0</search_pic>
</user>
<user>
<search_tkID>4</search_tkID>
<search_connection>1</search_connection>
<search_name>Danny Apple</search_name>
<search_pic>0</search_pic>
</user>
<count>
<number>2</number>
</count>
</users>";
?>

PHP文件尝试读取此文件:

$path = "xml/xml_test.php";
$xml_search = simplexml_load_file($path);
print_r($xml_search);

PHP页面输出的错误消息

Warning: simplexml_load_file() [function.simplexml-load-file]: xml/xml_test.php:5: parser error : Start tag expected, '<' not found in MYPAGE.php on line 16
Warning: simplexml_load_file() [function.simplexml-load-file]: print "<?xml version='"1.0'" encoding='"UTF-8'"?>"; in MYPAGE.php on line 16
Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in MYPAGE.php on line 16

您的XML文档无效。有效的XML文档可以选择以XML声明开头,并且至少有一个文档元素。

您所拥有的文档仅包含一个处理说明。无效:

<?php
   ...
?>

为了让SimpleXML加载和解析文档,您至少需要用这样一个文档元素来包装它,我在下面的示例中将其命名为<doc>

$path       = "xml/xml_test.php";
$buffer     = file_get_contents($path);
$xml_search = simplexml_load_string("<doc>$buffer</doc>");
print_r($xml_search);

它应该显示一些沿线的输出:

SimpleXMLElement Object
(
    [php] => SimpleXMLElement Object
        (
        )
    [users] => SimpleXMLElement Object
        (
          ...

实际的XML文档也可以输出(我建议通过print_r输出,因为print_r的输出可能会有点误导SimpleXMLElements:

$xml_search->asXML('php://output');

输出:

<?xml version="1.0"?>
<doc><?php header("Content-type: text/xml");
print "<?xml version='"1.0'" encoding='"UTF-8'"?>";
echo "
<users>
<user>
...

我希望您现在能更好地理解您试图加载的实际XML文档。

最后,最好将XML作为.xml文件逐字逐句地存储在磁盘上,然后将其加载到这两个PHP文件中。

文件xml/xml_test.php:

<?php
header("Content-type: text/xml");
readfile('result.xml');

另一个文件:

$path       = "xml/result.xml";    
$xml_search = simplexml_load_file($path);
...

我想这很可能更符合你的期望。

答案是:我需要读取URL,而不仅仅是文件名,以执行PHP,该PHP将生成simpleXML读取的XML输出。如此微小的差异让我好几个小时都筋疲力尽。如果您想执行PHP,则不允许使用相对路径。

$path = "http://wwww.site.com/xml/xml_test.php";
$xml_search = simplexml_load_file($path);
print_r($xml_search);