第 1 列第 2 行的错误:文档末尾的额外内容

Posted

技术标签:

【中文标题】第 1 列第 2 行的错误:文档末尾的额外内容【英文标题】:Error on line 2 at column 1: Extra content at the end of the document 【发布时间】:2011-05-31 11:09:55 【问题描述】:

当我使用下面的代码并在本地解析 xml 时,它可以正常工作,但是在服务器上上传相同的脚本时,它会显示错误。

注意:我从查询字符串中检索了$lng$lat,它在本地运行良好。

$lng=$_GET['lng'];
$lat=$_GET['lat'];
$conn=new LoginSystem();
$conn->connect();
$dom = new DOMDocument("1.0");

$query="select catch_id,catch_details,image from mycatch where longitude='$lng' AND latitude='$lat'";
$result = mysql_query($query);

if (!$result) 
  die("Invalid query: " . mysql_error());


header("Content-type: text/xml");

// Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result))
  $node = $dom->createElement("mycatch");
  $node = $dom->appendChild($node);
foreach ($row as $fieldname => $fieldvalue) 
      $child = $dom->createElement($fieldname);
    $child = $node->appendChild($child);
    $value = $dom->createTextNode($fieldvalue);
    $value = $child->appendChild($value);
  


$conn->disconnect();
$xml_string = $dom->saveXML();
echo $xml_string;

在服务器上它会抛出此错误。而且文件也是空的.....

此页面包含以下错误: 第 2 行第 1 列的错误:文档末尾的额外内容 下面是出现第一个错误之前的页面渲染。

【问题讨论】:

【参考方案1】:

添加到@john-erck 的答案https://***.com/a/11463891/418439,我的问题是由于外部库正在使用不推荐使用的(自 php 7.2 起)assert(string) 函数,该函数在我的 xml 之前生成了额外的字符。 assert(string)的解决方案是在外部库文件中设置error_reporting(E_ALL ^ E_DEPRECATED);(link)。

【讨论】:

【参考方案2】:

问题是数据库连接字符串,你的MySQL数据库连接函数参数之一不正确,所以浏览器输出有错误信息,右击输出网页查看html源代码你会看到错误行后跟正确的 XML 输出数据(文件)。 我遇到了同样的问题,上面的解决方案效果很好。

【讨论】:

【参考方案3】:

您可能在调用之前有输出(可能是错误/调试输出)

header("Content-type: text/xml");

因此,传递到浏览器的内容不是“xml”...这就是错误消息试图告诉您的内容(至少对我来说是这样,并且我收到的错误消息与您一样描述)。

【讨论】:

【参考方案4】:

我认为您正在创建一个如下所示的文档:

<mycatch>
    ....
</mycatch>
<mycatch>
    ....
</mycatch>

这不是一个有效的 XML 文档,因为它有多个根元素。您必须有一个***元素,如

<mydocument>      
  <mycatch>
      ....
  </mycatch>
  <mycatch>
      ....
  </mycatch>
  ....
</mydocument>

【讨论】:

【参考方案5】:

在结果集的每个循环中,您都将一个新的根元素附加到文档中,从而创建一个如下所示的 XML 文档:

<?xml version="1.0"?>
<mycatch>...</mycatch>
<mycatch>...</mycatch>
...

一个 XML 文档只能有一个根元素,这就是错误指出存在“额外内容”的原因。创建一个根元素并将所有 mycatch 元素添加到其中:

$root = $dom->createElement("root");
$dom->appendChild($root);
// ...
while ($row = @mysql_fetch_assoc($result))
  $node = $dom->createElement("mycatch");
  $root->appendChild($node);

【讨论】:

以上是关于第 1 列第 2 行的错误:文档末尾的额外内容的主要内容,如果未能解决你的问题,请参考以下文章

XML 错误:文档末尾的额外内容

xml 错误 xsl 样式表

OpenOffice calc 中的行号列

求某列第二最大值所在行的SQL

如何将一张表复制到另一张表

请问如果我还想把DataGridView中的第3列第5行的按钮设置不可编辑该怎么弄啊?(或者这个按钮隐藏)