XML с ошибкой «echo» PHP «Дополнительный контент в конце документа»

Я получаю ошибку, которая, как я считаю, очень специфична.

Этот 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("'",''',$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>'; ?> 

Большое спасибо!

Просто щелкните правой кнопкой мыши на своей веб-странице ошибки вывода и VIEW SOURCE CODE, вы увидите правильное сообщение об ошибке и номер строки из вашего файла PHP. Вы разрешите эту ошибку за несколько секунд.

«Дополнительный контент в конце документа»

Я хотел бы решить и понять, почему это происходит.

Почему это происходит? Короче говоря, это недопустимый 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 . Если результат вашей базы данных очень велик, и вы хотите передать данные вместо этого, вы можете взглянуть на библиотеку XMLWriter :

 $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(); - $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(); - $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(); - $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(); - $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(); - $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(); - $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(); - $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(); - $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(); 

Смотрите в действии.

У меня была одна и та же проблема, и я поставил «вокруг базы данных, и это сработало.