2015-07-06 8 views
1

Этот PHP-код работает правильно, но как добавить CDATA в узел контента?добавить CDATA в узел xml

<?php 
$xml = new DomDocument("1.0", "UTF-8"); 
$xml->load('xmldata.xml'); 

$title = $_POST['title']; 
$avtor = $_POST['avtor']; 
$date  = $_POST['date']; 
$category = $_POST['category']; 
$content = $_POST['content']; 

$rootTag = $xml->getElementsByTagName("root")->item(0); 

    $postingTag = $xml->createElement("posting"); 

    $titleTag = $xml->createElement("title", $title); 
    $avtorTag = $xml->createElement("avtor", $avtor); 
    $dateTag  = $xml->createElement("date",  $date); 
    $categoryTag = $xml->createElement("category", $category); 
    $contentTag = $xml->createElement("content", $content); 

    $postingTag->appendChild($titleTag); 
    $postingTag->appendChild($avtorTag); 
    $postingTag->appendChild($dateTag); 
    $postingTag->appendChild($categoryTag); 
    $postingTag->appendChild($contentTag); 

    $rootTag->appendChild($postingTag); 

$xml->formatOutput = true; 
$xml->save('xmldata.xml'); 
+0

http://php.net/manual/ru/domdocument.createcdatasection.php? – splash58

+0

CDATA или CDATA раздел? – hakre

ответ

5

DOM отделяет создание и добавление узлов. Вы создаете узел с помощью метода документа и добавляете его с помощью методов родительского узла.

Вот пример:

$document = new DOMDocument(); 
$root = $document->appendChild(
    $document->createElement('element-name') 
); 
$root->appendChild(
    $document->createCDATASection('one') 
); 
$root->appendChild(
    $document->createComment('two') 
); 
$root->appendChild(
    $document->createTextNode('three') 
); 

echo $document->saveXml(); 

Выход:

<?xml version="1.0"?> 
<element-name><![CDATA[one]]><!--two-->three</element-name> 

DOMNode::appendChild() и подобные методы возвращают прилагаемый узел, так что вы можете комбинировать их с DOMDocument::create*() вызова.

+0

Спасибо за ответ. – Deb

2

CDATA или CDATA раздел?

$cdata = 'This is my character data!'; 

При первом использовании второй параметр createElement('tagname', 'cdata') - эй вы уже делаете это здесь:

$contentTag = $xml->createElement("content", $content); 
               ^^^^^^^^ 

для второго createCDATASection() и добавить его как ребенка к созданному элементу:

$contentTag = $xml->createElement("content", $content); 
$contentTag->appendChild($xml->createCDATASection($cdata);