我知道很多这样的问题都被问过,我已经阅读了很多答案并且仍然会出现错误。我创建了一个用于测试目的的简单版本,并获得与我的主脚本相同的错误。我确信这很简单,但我已经和它斗争了好几个小时而且正在失去头发。
在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
答案 0 :(得分:0)
您的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
的输出可能会误导 SimpleXMLElement :
$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);
...
我猜这更有可能符合您的期望。
答案 1 :(得分:0)
答案:我需要读取URL,而不仅仅是文件名,以执行将生成XML输出的PHP,而不是通过simpleXML读取。这样一个微小的差异让我好几个小时。如果要执行PHP,则不允许相对路径。
$path = "http://wwww.site.com/xml/xml_test.php";
$xml_search = simplexml_load_file($path);
print_r($xml_search);