0

私は自分のサイトにGoogleマップを実装しようとしています。私はここのチュートリアルに従っています:https ://developers.google.com/maps/articles/phpsqlajax_v3?hl = sv

ただし、データベースをループするときにxmlを正しく出力できません。チュートリアルには、xmlを出力する方法に関する3つの例があります。例2と例3の両方を使用すると、「2行目の列1のエラー:ドキュメントの最後に余分なコンテンツがあります」というメッセージが表示されます。

どうしたのか、なぜこのエラーメッセージが表示されるのですか。コードはグーグルからのものなので、私はそれが正しいと思います、それで私の最も良い推測は私が私のファイルにある種の隠されたサインを持っているということです。

どんな助けでも大いに感謝します!

<?php  

 require("dbinfo.php"); 

// Start XML file, create parent node

$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node); 

// Opens a connection to a MySQL server

$connection=mysql_connect (localhost, $username, $password); 
if (!$connection) {  die('Not connected : ' . mysql_error());} 

// Set the active MySQL database

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

// Select all the rows in the markers table

$query = "SELECT * FROM markers WHERE 1"; 
$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)){  
// ADD TO XML DOCUMENT NODE  
$node = $dom->createElement("marker");  
$newnode = $parnode->appendChild($node);   
$newnode->setAttribute("name",$row['name']);
$newnode->setAttribute("address", $row['address']);  
$newnode->setAttribute("lat", $row['lat']);  
$newnode->setAttribute("lng", $row['lng']);  
$newnode->setAttribute("type", $row['type']);
} 
echo $dom->saveXML();
?>

編集:

Here's an example of my output which might give some more insights on what's going on:

<marker name="Pan Africa Market" address="1521 1st Ave, Seattle, WA" lat="47.608940"      
lng="-122.340141" type="restaurant">
<marker name="Buddha Thai &amp; Bar" address="2222 2nd Ave, Seattle, WA"    
lat="47.613590" lng="-122.344391" type="bar">
<marker name="The Melting Pot" address="14 Mercer St, Seattle, WA" lat="47.624561"    
lng="-122.356445" type="restaurant">
</marker>
</marker>
</marker>
</marker>

したがって、問題は、マーカーノードがループごとに閉じないことであるように思われます。代わりに、終了ノードが最後に追加されます。

4

1 に答える 1

1

$node上部のマーカーノードにすでに割り当てられており、whileループで上書きしています...そのため、最初の反復後に混乱します。whileループを次のように置き換えます。

<?php
while ($row = @mysql_fetch_assoc($result)){  
// ADD TO XML DOCUMENT NODE  
    $marker = $dom->createElement("marker");  
    $node->appendChild($marker);   
    $marker->setAttribute("name",$row['name']);
    $marker->setAttribute("address", $row['address']);  
    $marker->setAttribute("lat", $row['lat']);  
    $marker->setAttribute("lng", $row['lng']);  
    $marker->setAttribute("type", $row['type']);
}
?>

お役に立てれば。

于 2012-07-05T07:04:15.253 に答える