Созданная карта сайта Google не проверяется

Ниже я написал этот небольшой класс, который генерирует карту сайта XML, хотя, когда я пытаюсь добавить это в Google Веб-мастер, я получаю сообщение об ошибке:

URL-адрес файла Sitemap: http://www.moto-trek.co.uk/sitemap/xml < / а>

Неподдерживаемый формат файла. Похоже, ваш файл Sitemap имеет неподдерживаемый формат. Убедитесь, что он соответствует нашим рекомендациям по созданию файлов Sitemap, и отправьте его повторно.

    <?php

class Frontend_Sitemap_Xml extends Cms_Controller {

    /**
     * Intercept special function actions and dispatch them.
     */
    public function postDispatch() {    
        $db = Cms_Db_Connections::getInstance()->getConnection();
        $oFront = $this->getFrontController();
        $oUrl = Cms_Url::getInstance();
        $oCore = Cms_Core::getInstance();

        $absoDomPath = $oFront->getDomain() . $oFront->getHome();

        $pDom = new DOMDocument();

        $pXML = $pDom->createElement('xml');
        $pXML->setAttribute('version', '1.0');
        $pXML->setAttribute('encoding', 'UTF-8');

        // Finally we append the attribute to the XML tree using appendChild
        $pDom->appendChild($pXML);

        $pUrlset = $pDom->createElement('urlset');
        $pUrlset->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
        $pXML->appendChild($pUrlset);

        // FETCH content and section items  
        $array = $this->getDataset("sitemap")->toArray();
        foreach($array["sitemap"]['rows'] as $row) {
            try {               
                $content_id = $row['id']['fvalue'];
                $url = "http://".$absoDomPath.$oUrl->forContent($content_id);

                $pUrl   = $pDom->createElement('url');

                $pLoc        = $pDom->createElement('loc', $url);
                $pLastmod    = $pDom->createElement('lastmod', gmdate('Y-m-d\TH:i:s', strtotime($row['modified']['value'])));
                $pChangefreq = $pDom->createElement('changefreq', ($row['changefreq']['fvalue'] != "")?$row['changefreq']['fvalue']:'monthly');
                $pPriority   = $pDom->createElement('priority', ($row['priority']['fvalue'])?$row['priority']['fvalue']:'0.5');

                $pUrl->appendChild($pLoc);
                $pUrl->appendChild($pLastmod);
                $pUrl->appendChild($pChangefreq);
                $pUrl->appendChild($pPriority);

                $pUrlset->appendChild($pUrl);
            } catch(Exception $e) {
                throw($e);          
            }
         }  

        // Set content type to XML, thus forcing the browser to render is as XML
        header('Content-type: text/xml');

        // Here we simply dump the XML tree to a string and output it to the browser
        // We could use one of the other save methods to save the tree as a HTML string
        // XML file or HTML file.
        echo $pDom->saveXML();

    }   
}
?>

person John Magnolia    schedule 03.11.2011    source источник


Ответы (1)


urlset должен быть корневым элементом, но в вашем случае это xml. Поэтому добавление urlset непосредственно в domdocument должно решить вашу проблему.

$pDom = new DOMDocument('1.0','UTF-8');

$pUrlset = $pDom->createElement('urlset');
$pUrlset->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');

foreach( ){  }

$pDom->appendChild($pUrlset);
echo $pDom->saveXML();
person dev-null-dweller    schedule 03.11.2011
comment
Хорошо, спасибо, я попытался удалить createElement ('xml'), хотя это приводит к тому, что карта сайта XML не отображается - person John Magnolia; 04.11.2011
comment
Я забыл упомянуть, но кодировку и версию следует перенести в конструктор DOMDocument, см. Пример кода, он отлично работает. - person dev-null-dweller; 04.11.2011