XML与PHP“echo”获取错误“文档末尾的额外内容”

时间:2013-04-16 00:44:24

标签: php xml echo extra

我收到一个我认为非常具体的错误。

此PHP存储在我的域中。它访问带有mysql数据库的服务器,并使用它的表信息生成带有标记的XML,然后在Google Map中使用。

实际上它正在工作,因为它正在检索标记,但是这个错误并没有消失,我不知道是什么导致它。我对所有的php和android编程都很新。如果有人能够通过简单的解释为我澄清这一点,我会很高兴。

错误是:

This page contains the following errors:

error on line 3 at column 1: Extra content at the end of the document
Below is a rendering of the page up to the first error.

然后它呈现我的预期结果。我想解决并理解为什么会发生这种情况。

你去我的PHP代码。我从教程(https://developers.google.com/maps/articles/phpsqlajax_v3)得到了:

<?php
require("db_config.php");

function parseToXML($htmlStr) 
{ 
$xmlStr=str_replace('<','&lt;',$htmlStr); 
$xmlStr=str_replace('>','&gt;',$xmlStr); 
$xmlStr=str_replace('"','&quot;',$xmlStr); 
$xmlStr=str_replace("'",'&#39;',$xmlStr); 
$xmlStr=str_replace("&",'&amp;',$xmlStr); 
return $xmlStr; 
} 

// Opens a connection to a MySQL server

$connection=mysql_connect ($mysql_host, $mysql_user, $mysql_password);
if (!$connection) {  die('Not connected : ' . mysql_error());}

// Set the active MySQL database

$db_selected = mysql_select_db($mysql_database, $connection);
if (!$db_selected) {
    die ('Can\'t use db : ' . mysql_error());
}

// Select all the rows in the markers table
$query = "SELECT * FROM Estac WHERE 1";
$result = mysql_query($query);
if (!$result) {
        die('Invalid query: ' . mysql_error());
}

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

// Start XML file, echo parent node
echo '<markers>';

// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  // ADD TO XML DOCUMENT NODE
  echo '<marker>';
  echo 'Name="' . parseToXML($row['Name']) . '" ';
  echo 'Address="' . parseToXML($row['Address']) . '" ';
  echo 'Tel="' . parseToXML($row['Tel']) . '" ';
  echo 'Lat="' . $row['Lat'] . '" ';
  echo 'Lng="' . $row['Lng'] . '" ';
  echo 'Price="' . $row['Price'] . '" ';
  echo '</marker>';
}

// End XML file
echo '</markers>';

?>

非常感谢!

3 个答案:

答案 0 :(得分:4)

只需右键单击输出错误网页并查看源代码,您将在PHP文件中看到正确的错误消息和行号。您将在几秒钟内解决该错误。

答案 1 :(得分:3)

  

“文档末尾的额外内容”

     

我想解决并理解为什么会这样。

为什么会这样?这简直就是一个无效的XML。请参阅以下示例:

<xml>
</xml>
This here is extra content at the end of the document

如您所见,通常没有人会创建这样的XML文件。在你的情况下,这是因为那些程序员的常见事故,他们自己编写函数来输出XML而这些函数已经存在。然后他们忘记正确输出xml ,然后他们被搞砸了:

$xml = new SimpleXMLElement('<markers/>');

foreach ($databaseResult as $row) 
{
    $marker = $xml->addChild('marker');
    foreach ($row as $key => $value) 
    {
        $marker[$key] = $value;
    }
}

header("Content-type: text/xml");
$xml->asXML('php://output');

此示例使用SimpleXML library。如果您的数据库结果非常大并且您希望改为流式传输数据,则可以查看XMLWriter library

$writer = new XMLWriter();
$writer->openUri('php://output');

$writer->startDocument();
$writer->startElement('markers');

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

foreach ($databaseResult as $row)
{
    $writer->writeRaw("\n  ");
    $writer->flush();
    $writer->startElement('marker');

    foreach ($row as $key => $value)
    {
        $writer->writeAttribute($key, $value);
    }

    $writer->endElement();
}

$writer->writeRaw("\n");
$writer->endElement();
$writer->flush();

See it in action.

答案 2 :(得分:0)

我遇到了同样的问题并且放了&#39; &#39;在数据库周围,它工作。