createCDATASection не определен при генерации XML

Я пытаюсь сгенерировать XML-файл, используя PHP, с элементом описания, помещенным в CDATA.

<?php

$title = "Volvo";
$description = "this is a test description";

$xml = new SimpleXMLElement('<xml/>');
$track = $xml->addChild('blog');
$post = $track->addChild('post');
$post->addChild('title',$title);
$cdata = createDATASection($description);
$post->addChild('description',$cdata);

$xml->asXml();
?>

Я правильно использую createDATASection? Я также пробовал другие способы, но я все еще не понимаю.

0

Решение

createCDATASection() это метод DOMDocument, Сам SimpleXML ограничен. Если вам нужен такой большой контроль (например, создание определенных типов узлов), вам придется использовать DOM. SimpleXML рассматривает XML как дерево простых элементов. В DOM все является узлом, элементами, текстами, атрибутами, комментариями, …

В DOM создание и приложение разделены. Вы создаете новый узел (любого типа) с соответствующим методом DOMDocument, а затем добавляете его, используя метод родительского узла. Методы добавления возвращают узел, поэтому вы можете вкладывать вызовы.

Вот ваш пример источника, преобразованного в вызовы API DOM:

$title = "Volvo";
$description = "this is a test description";

$document = new DOMDocument();
$xml = $document
->appendChild($document->createElement('xml'));
$blog = $xml
->appendChild($document->createElement('blog'));
$track = $blog
->appendChild($document->createElement('track'));
$post = $track
->appendChild($document->createElement('post'));
$post
->appendChild($document->createElement('title'))
->appendChild($document->createTextNode($title));
$post
->appendChild($document->createElement('description'))
->appendChild($document->createCDATASection($description));

$document->formatOutput = TRUE;
echo $document->saveXml();

Выход:

<?xml version="1.0"?>
<xml>
<blog>
<track>
<post>
<title>Volvo</title>
<description><![CDATA[this is a test description]]></description>
</post>
</track>
</blog>
</xml>
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector