Как исправить «объявление XML разрешено только в начале документа» - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь сгенерировать карту сайта, но каким-то образом дополнительный тег DIV в начальной строке xml.Мне нужно удалить этот неправильный тег DIV из вывода xml.

Сначала я попытался собрать логику и отделить генерацию стороны xml внизу.установить заголовок 'text / xml'.Я пытался раздеть теги xml всей строки перед выводом, но затем он показывает документ пустым

private function removeImageAndEmbeds ( $content )
{
    // remove img tags
    $re1='(<img).*?\\/.*?\\/.*?\\/.*?\\/.*?\\/.*?\\/.*?(\\/>)';
    if ( $c=preg_replace("/".$re1."/is", "", $content) ) $content = $c;

    // remove embedded tags
    $re2='(<div).*?(data-oembed-url=)(".*?").*?<\\/div>.*?(<\\/div>)';
    if ( $c=preg_replace("/".$re2."/is", "", $content) ) $content = $c;

    return $content;
}

public function sitemaps ($tenantName="") {

    if ( !empty($tenantName) ) {

            $this->db->like( 't.name', str_replace('-', ' ', rawurldecode($tenantName)), 'none' );
            $results = $this->db->get($this->TBL . ' t')->result_array();

            foreach ( $results as $result ) {

                $tenantId = $result['id'];
                $tenantNameinURL = formatTenantNameinURL( $result['name'] );

                $AllItems =  $this->db->get_where($this->DIVIEW . ' di', 'di.account_id = '. $tenantId)->result_array();

                $topics = [];
                $itemIds = [];
                $ddIds = [];
                $urls = [];
                foreach ( $AllItems as $k => $item ) {
                    $pieces = explode('_', $item['id']);
                    if ( $pieces[1] === $this->ITEMTBL ) {
                        if( !in_array($item['record_id'], $itemIds) ){

                            $itemIds[] = $item['record_id'];
                            $content = $this->removeImageAndEmbeds( $item['content'] );

                            $AllItems[$k]['content'] = $content;
                            $topics[$k][] = $AllItems[$k];
                            $urls[$k]['url'] = formatFrontEndURL( $this->current_class_name, $tenantName, 'show', $pieces[0] );
                        }
                    } else if ( $pieces[1] === 'dataDefinitions' ) {
                        if( !in_array($item['record_id'], $ddIds) ){

                            $ddIds[] = $item['record_id'];
                            $content = $this->removeImageAndEmbeds( $item['content'] );

                            $AllItems[$k]['content'] = $content;
                            $topics[$k][] = $AllItems[$k];
                            $urls[$k]['url'] = formatFrontEndURL( $this->current_class_name, $tenantName, 'data_definition', $pieces[0] );
                        }
                    }
                }

                $urlset = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset />');
                $urlset->addAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
                foreach ($topics as $i => $itemsInTopic) {

                    $url = $urlset->addChild('url');
                    $url->loc = $urls[$i]['url'];

                    $pageMap = $url->addChild('PageMap');
                    $pageMap->addAttribute('xmlns', 'http://www.google.com/schemas/sitemap-pagemap/1.0');
                    foreach ( $itemsInTopic as $item ) {

                        $content = $item['content'];
                        $content = trim( str_replace(["&nbsp;","\r","\n","\t", "&#13;", "&#10;"], ' ', strip_tags( utf8_decode( $content ) )) );
                        $dataObject = $pageMap->addChild('DataObject');
                        $dataObject->addAttribute('type', 'document');
                        $dataObject->addAttribute('id', $item['record_id']);
                        $dataObject->Attribute[0]['name'] = 'title';
                        $dataObject->Attribute[0] = $item['title'];
                        $dataObject->Attribute[1]['name'] = 'content';
                        $dataObject->Attribute[1] = $content;
                    }
                }

                $xmlContent = $urlset->asXML();
                $this->output->set_content_type('text/xml')->set_output( $xmlContent );
            }
        }
  }

вот две ошибки, сгенерированные из валидатора seochat https://drive.google.com/file/d/1vacmuJL6hnMErzqZ5zZWkkObT74rKOmT/view?usp=sharing https://drive.google.com/file/d/1y3z85D1WtJIT9GvOC-DeYwS-DtQCAxK5/view?usp=sharing

вот ошибка консоли google https://drive.google.com/file/d/1qMvifyjGILqAjJzdWdc90jyymvdUFV5A/view?usp=sharing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...