Как вывести секцию CDATA в XML?

Всем привет. Встала задача вывести в XML секцию CDATA, сам XML генерируется на PHP через массив. Вот пример того как это всё выводится:

<?php
/*
 * Выводим данные по всем репозиториям для дерева разделов
 */
require_once  dirname(__FILE__).'/response.class.php';
 
class ExtrasRepository extends ExtrasResponse{
    var $root = '<repositories/>';

	public function process(){
		$result = array(
			'repository'  => [
			    'id' => '4d4c3fa6b2b0830da9000001',
                'name' => 'Extras',
                'description' => '<img src="http://modxcms.com/assets/images/icons/ico_tools.png" alt="Add-ons" class="left" /> <h3>Want something not included in the MODx core install?</h3><p>Menu builders to image galleries, helper utilitis to podcasting and everything in between. These add-ons can help you build a site to <em>exactly</em> match your vision.</p>',
				'createdon' => '2011-02-04T18:05:07+0000',
                'rank' => 0,
                'packages' => 760,
                'tag' => '',
                'templated' => 0
            ],
		);

		return $this->toXML($result);
	}

}
return 'ExtrasRepository';

response.class.php

<?php

abstract class ExtrasProcessor extends modProcessor{
    
    var $processorsParams = array();
    
    function __construct(modX &$modx, array $properties = array()) {
        parent::__construct($modx, $properties);
        
        // Получаем путь до процессоров
        if(!$ns = $modx->getObject('modNamespace', 'extras')){
            $err = "Не было получено пространство имен extras";
            $modx->log(xPDO::LOG_LEVEL_ERROR, $err);
            $this->failure($err);
            return; 
        }  
        
        // Get processors params
        $this->processorsParams  = array(
            'processors_path'   => $ns->getCorePath().'processors/',
            'location'          => 'rest/',
        );
        
        /*
         * Be sure you set system setting modxRepository.handler_doc_id  
         */
        if(!$this->parent = $modx->getOption('extras_handler_doc_id', null, false)){
            return $modx->log( xPDO::LOG_LEVEL_ERROR, 'Please, be sure you set system setting extras_handler_doc_id');
        }
    }
    
    public function runProcessor($action, $scriptProperties = array()){
        if(!$this->processorsParams){
            $this->failure("Не были получены данные процессоров");
            return false;
        }
        return $this->modx->runProcessor($action, $scriptProperties, $this->processorsParams);
    }
}

abstract class ExtrasResponse extends ExtrasProcessor{
    var $root = '<root/>';

    public function toXML($response, $rootParams =  array()){
        header('Content-type:text/xml', 1);
        $response = (array)$response; 
        $xml = new SimpleXMLElement($this->root);
        foreach($rootParams as  $k => $v){
            $xml->addAttribute($k, $v);
        }
        $this->array_to_xml($response, $xml);  
        return $xml->asXML();
    }
    
    function array_to_xml($arr, & $xml)
    {
        foreach ($arr as $k => $v) {
            if(is_numeric($k)){
                $this->array_to_xml($v,  $xml);
            }
            else if(is_array($v)){
                $this->array_to_xml($v,  $xml->addChild($k));
            }
            else{
                $node = $xml->addChild($k, $v);
            } 
        }
        return $xml;
    }
}

return 'ExtrasProcessor';
Править нужно файл response.class.php, вот только не пойму как сюда впихнуть тип секции CDATA, чтобы её можно было выводить через массив в классе ExtrasRepository у любой секции. Может кто покажет как на моём примере создать секцию CDATA?

P.S. CDATA должна выводиться у секции description, но может быть и у любой другой.
SEQUEL.ONE
17 сентября 2018, 11:53
modx.pro
2
1 121
+1

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0