我收到XML错误:“XML文档中只允许一个顶级元素。”当我尝试在PHP中运行我的站点地图脚本时:
$num_rows = mysql_num_rows(mysql_query("SELECT * FROM pages_content WHERE date < CURRENT_TIMESTAMP"));
$result = mysql_query("SELECT * FROM pages_content WHERE date < CURRENT_TIMESTAMP ORDER BY id DESC") or die("Query failed");
echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">';
for($i=0;$i<$num_rows; $i++) {
$url_product = 'http://www.hostcule.com/'.mysql_result($result,$i,"title");
echo'
<url>
<loc>'.$url_product.'</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
';
echo '</urlset>'; }
它出了什么问题?
答案 0 :(得分:4)
您需要将结束'</urlset'>
移出for循环。
答案 1 :(得分:2)
这一行错了:
echo '</urlset>'; }
你需要:
}
echo '</urlset>';
当您多次关闭顶级标记时,您将收到该错误。
答案 2 :(得分:2)
您需要在回声之前移动大括号}
。像这样:
$num_rows = mysql_num_rows(mysql_query("SELECT * FROM pages_content WHERE date < CURRENT_TIMESTAMP"));
$result = mysql_query("SELECT * FROM pages_content WHERE date < CURRENT_TIMESTAMP ORDER BY id DESC") or die("Query failed");
echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">';
for($i=0;$i<$num_rows; $i++) {
$url_product = 'http://www.hostcule.com/'.mysql_result($result,$i,"title");
echo'
<url>
<loc>'.$url_product.'</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
';
}//<=To here
echo '</urlset>'; // move this one =>}
答案 3 :(得分:0)
PHP是一种模板语言。使用它来创建输出而不是乱用串联字符串。例如:
<?php
$result= mysql_query('SELECT * FROM pages_content WHERE date<CURRENT_TIMESTAMP ORDER BY id DESC') or die('Query failed');
?>
<urlset>
<?php while ($row= mysql_fetch_assoc($result)) { ?>
<url>
<loc>http://www.hostcule.com/<?php urlencode($row['title']) ?></loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<?php } ?>
</urlset>
如果像这样持续缩进,那么将</urlset>
放在错误的地方的错误会立即变得明显,而不是调试的痛苦。