网站Sitemap生成报错:未定义news命名空间前缀求助
解决Sitemap中news命名空间未定义的报错
嘿,这个问题我太熟悉了!你碰到的红色提示报错,核心原因是XML解析器不认识news这个命名空间前缀——你在代码里直接用了<news:name>标签,但没在根元素<urlset>里声明这个前缀对应的命名空间地址,所以解析器不知道该怎么处理它。
修复步骤
只需要在<urlset>标签里添加news命名空间的声明即可,通常新闻站点地图的命名空间是Google定义的http://www.google.com/schemas/sitemap-news/0.9。另外顺便提一句:标准的Google新闻站点地图里,新闻相关标签需要放在<news:news>父标签下,不过先解决你的报错问题,我们先修改命名空间部分。
修改后的完整代码
header("Content-Type: application/xml; charset=utf-8"); echo '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL; // 这里添加了xmlns:news的命名空间声明,同时补充了对应的schema地址 echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-news/0.9 http://www.google.com/schemas/sitemap-news/0.9/sitemap-news.xsd">' . PHP_EOL; $base_url = "www.example.com"; while($row = mysqli_fetch_array($sitegrab)) { echo '<url>' . PHP_EOL; // 如果你是要做标准Google新闻sitemap,建议把新闻标签包裹在<news:news>里,示例如下: // echo '<news:news>' . PHP_EOL; // echo '<news:name>'.$row['Website'].'</news:name>' . PHP_EOL; // echo '</news:news>' . PHP_EOL; echo '<news:name>'.$row['Website'].'</news:name>' . PHP_EOL; echo '<loc>'.$base_url.'</loc>' . PHP_EOL; echo '<changefreq>daily</changefreq>' . PHP_EOL; echo '<priority>0.5</priority>' . PHP_EOL; echo '</url>' . PHP_EOL; } echo '</urlset>' . PHP_EOL;
为什么这样能解决问题?
XML的命名空间机制就是用来区分不同标签体系的,当你使用带前缀的标签(比如news:name)时,必须提前告诉解析器这个前缀对应的官方schema地址,这样它才能正确识别和验证标签的合法性。添加xmlns:news="..."之后,解析器就知道news前缀对应的是Google新闻站点地图的规范,自然就不会报错了。
内容的提问来源于stack exchange,提问作者rayvic
相关产品推荐
相关产品推荐

