警告:simplexml_load_file()[function.simplexml-load-file]:xml / xml_test.php:5:解析器错误:开始标记期望,'<'未找到

时间:2015-03-26 02:30:34

标签: php xml

我知道很多这样的问题都被问过,我已经阅读了很多答案并且仍然会出现错误。我创建了一个用于测试目的的简单版本,并获得与我的主脚本相同的错误。我确信这很简单,但我已经和它斗争了好几个小时而且正在失去头发。

在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

2 个答案:

答案 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);