XML Chyba: jen se nechá jeden prvek nejvyšší úrovně

hlasů
1

I obdrží chybu XML: „Pouze jeden prvek nejvyšší úrovně je povoleno v XML dokumentu.“ Při pokusu o spuštění svou mapu stránek skript v 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>'; } 

Co je s tím špatně?

Položena 28/12/2009 v 14:15
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
4

Budete muset přesunout uzavírací '</urlset'>mimo cyklus for.

Odpovězeno 28/12/2009 v 14:16
zdroj uživatelem

hlasů
2

Budete muset přesunout složená závorka }před echo. Jako tak:

$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 =>} 
Odpovězeno 28/12/2009 v 14:18
zdroj uživatelem

hlasů
2

Tato linka je v pořádku:

echo '</urlset>'; } 

Potřebuješ:

}
echo '</urlset>';  

Jak jste se zavírají na nejvyšší úrovni tagů vícekrát, jste získali tuto chybu.

Odpovězeno 28/12/2009 v 14:17
zdroj uživatelem

hlasů
0

PHP je jazyk šablon. Použijte jej k vytvoření výstupu namísto pohráváte s zřetězení řetězců. např.:

<?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>

S udržováním konstantního odsazení, jako je tento, chyby jako dostat to </urlset>na špatném místě se okamžitě projeví místo bolesti ladit.

Odpovězeno 28/12/2009 v 15:21
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more