致命错误:在非对象上调用成员函数attributes()

时间:2014-01-07 17:08:27

标签: php xml rss feed sitemap

我正在尝试使用Blogger Feed创建我的XML站点地图,所以我尝试使用下面的代码然后它正常工作。

<?php
header('application/rss+xml; charset=utf-8');
header('Content-Type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
echo '<?xml version="1.0" encoding="utf-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
';
$sitemapONE = simplexml_load_file('http://www.exeideas.com/atom.xml?redirect=false&start-index=1&max-results=368');
foreach($sitemapONE->entry as $value)
{
echo '
<url>
<loc>http://www.exeideas.com/'.$value->link[4]->attributes()->href.'</loc>
<lastmod>'.$value->updated.'</lastmod>
<changefreq>always</changefreq>
</url>
';
}
echo '</urlset>';
?>

但当我将“max-results = 368”增加到“max-results = 369”时,我收到错误为“文档末尾的额外内容”。在XML页面的末尾,它显示:

  

(!)致命错误:在非对象上调用成员函数attributes().............

现在该怎么办?

2 个答案:

答案 0 :(得分:1)

由于这是动态的,你需要在调用它之前检查它的存在:

foreach($sitemapONE->entry as $value)
{
    if(isset($value->link[4]))
    {
        echo '
        <url>
        <loc>http://www.exeideas.com/'.$value->link[4]->attributes()->href.'</loc>
        <lastmod>'.$value->updated.'</lastmod>
        <changefreq>always</changefreq>
        </url>
        ';
    }
}
echo '</urlset>';
?>

答案 1 :(得分:0)

感谢 user2191572 ,您解决了我的问题。现在对于新来者,我在这里附上完美的代码,通过php制作你的Blogger站点地图,该站点地图也经过 validator.w3.org验证 ......

<?php
header('application/rss+xml; charset=utf-8');
header('Content-Type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
echo '<?xml version="1.0" encoding="utf-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
';
$sitemapONE = simplexml_load_file('http://www.exeideas.com/atom.xml?redirect=false&start-index=1&max-results=500');
foreach($sitemapONE->entry as $value)
{
echo '
<url>
<loc>http://www.exeideas.com/'.$value->link[4]->attributes()->href.'</loc>
<lastmod>'.$value->updated.'</lastmod>
<changefreq>always</changefreq>
</url>
';
}
echo '</urlset>';
?>