第6行第1行的错误:仅在文档开头允许XML声明

时间:2014-01-21 14:59:58

标签: php xml

我正在尝试构建一个XML文件。但坚持错误。我包括代码和错误。提前谢谢。

    <?php 
    mysql_connect("localhost", "root", "") or die(mysql_error()); 
    mysql_select_db("comrade") or die(mysql_error()); 
    $data = mysql_query("SELECT * FROM support WHERE DATE(`date`) = CURDATE()") 
    or die(mysql_error());
    $xml = new SimpleXMLElement('<xml/>');
    while($info = mysql_fetch_array( $data )) 
     { 
      $support = $xml->addChild('support');
      $support->addChild('cus_name',$info['com_name']);
      $support->addChild('ser_type',$info['ser_type']);
     } 

     Header('Content-type: text/xml');
     print($xml->asXML());
     ?>

显示以下错误

     Below is a rendering of the page up to the first error.

3 个答案:

答案 0 :(得分:11)

简而言之,你应该这样做:

ob_clean(); //Clean (erase) the output buffer
print($xml->asXML());

解释:如果任何包含的文件打印新行,您将获得

  第6行第2行的

错误:仅在开始时允许XML声明   文件

可能是因为在某个文件中<?php标记在空行后开始。

所以不要搜索导致错误的文件,只需清理输出缓冲区即可。

答案 1 :(得分:4)

您的问题是Header('Content-type: text/xml');

的展示位置

尝试此操作并确保header()来电之前 NOTHING

<?php 
header('Content-type: text/xml');

mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db("comrade") or die(mysql_error()); 
$data = mysql_query("SELECT * FROM support WHERE DATE(`date`) = CURDATE()") 
or die(mysql_error());

$xml = new SimpleXMLElement('<xml/>');
while($info = mysql_fetch_array( $data )) 
{ 
    $support = $xml->addChild('support');
    $support->addChild('cus_name',$info['com_name']);
    $support->addChild('ser_type',$info['ser_type']);
} 

print($xml->asXML());
?>

答案 2 :(得分:0)

有时保存带有/不带BOM的UTF-8可以解决这个(和类似的)问题。在保存方法错误的情况下,文件的最开头可能存在一些特殊字节。