Как вывести секцию CDATA в XML?
Всем привет. Встала задача вывести в XML секцию CDATA, сам XML генерируется на PHP через массив. Вот пример того как это всё выводится:
response.class.php
P.S. CDATA должна выводиться у секции description, но может быть и у любой другой.
<?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, но может быть и у любой другой.