ข้อผิดพลาดร้ายแรง: การเรียกไปยังแอตทริบิวต์ฟังก์ชันสมาชิก () บนวัตถุที่ไม่ใช่

ฉันกำลังพยายามสร้างแผนผังไซต์ XML จากฟีดของ Blogger ดังนั้นฉันจึงลองใช้โค้ดด้านล่าง ซึ่งก็ทำงานได้ดี

<?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 มันจะแสดง:

( ! ) ข้อผิดพลาดร้ายแรง: การเรียกไปยังฟังก์ชันสมาชิกแอตทริบิวต์ () บนวัตถุที่ไม่ใช่.............

จะทำอย่างไรตอนนี้?


person Muhammad Hassan    schedule 07.01.2014    source แหล่งที่มา
comment
มันง่าย $value-›link[4] ไม่ใช่วัตถุและไม่มีวิธีการชื่อแอตทริบิวต์(); ก่อนหน้าบรรทัดนั้นคุณสามารถใช้ var_dump($values); เพื่อตรวจสอบข้อมูลที่คุณใช้   -  person Rottingham    schedule 07.01.2014
comment
@Rottingham ขอบคุณสำหรับความคิดเห็น แต่ user2191572 ทำได้อย่างสมบูรณ์แบบ ลองดูด้านล่าง   -  person Muhammad Hassan    schedule 08.01.2014


คำตอบ (2)


เนื่องจากนี่เป็นไดนามิก คุณต้องตรวจสอบการมีอยู่ของมันก่อนที่จะเรียกมัน:

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>';
?>
person MonkeyZeus    schedule 07.01.2014
comment
วิธีนี้ไม่ได้ช่วยอะไร เนื่องจากคุณยังคงโทรหา attributes() บน link[4] คุณจะต้องตรวจสอบว่า link[4] เป็นวัตถุที่คุณคาดหวัง - person naththedeveloper; 07.01.2014
comment
@fdl ถูกต้องแล้ว ฉันไม่สังเกตเห็นวงเล็บที่แนบมากับ attributes() - person MonkeyZeus; 07.01.2014
comment
@ user2191572 คุณทำได้แล้ว... ขอบคุณ... :-) - person Muhammad Hassan; 08.01.2014

ขอบคุณ user2191572 คุณแก้ไขปัญหาของฉันได้แล้ว สำหรับผู้มาใหม่ ฉันกำลังแนบโค้ดที่สมบูรณ์แบบเพื่อสร้างแผนผังไซต์ Blogger ของคุณผ่าน php ที่ได้รับการตรวจสอบโดย 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>';
?>
person Muhammad Hassan    schedule 08.01.2014