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

hun*_*ter 23 php xml

当我使用下面的代码并在本地解析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;
Run Code Online (Sandbox Code Playgroud)

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

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

Jim*_*son 42

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

<mycatch>
    ....
</mycatch>
<mycatch>
    ....
</mycatch>
Run Code Online (Sandbox Code Playgroud)

这不是有效的XML文档,因为它有多个根元素.您必须具有单个顶级元素,如

<mydocument>      
  <mycatch>
      ....
  </mycatch>
  <mycatch>
      ....
  </mycatch>
  ....
</mydocument>
Run Code Online (Sandbox Code Playgroud)


Tom*_*E.C 7

问题是数据库连接字符串,你的一个MySQL数据库连接函数参数不正确,所以浏览器输出中有一条错误信息,只需右键单击输出网页并查看html源代码,你会看到错误行后跟正确的XML输出数据(文件).我有同样的问题,上述解决方案完美无缺.

  • 善于思考"查看HTML源代码" (2认同)

Joh*_*rck 5

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

header("Content-type: text/xml");
Run Code Online (Sandbox Code Playgroud)

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


Bre*_*ail 3

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

<?xml version="1.0"?>
<mycatch>...</mycatch>
<mycatch>...</mycatch>
...
Run Code Online (Sandbox Code Playgroud)

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

$root = $dom->createElement("root");
$dom->appendChild($root);
// ...
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->createElement("mycatch");
  $root->appendChild($node);
Run Code Online (Sandbox Code Playgroud)