Я пытаюсь сгенерировать 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? Я также пробовал другие способы, но я все еще не понимаю.
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>
Других решений пока нет …