Как передать специальные символы в файл xml

Я редактирую XML-файл в конкретном файле узла после того, как я сохраняю его, но он содержит некоторый специальный символ из-за строки номер 7 моего кода

$xml = simplexml_load_file('demo.xml');
$i=2;

foreach($xml->Page as $myPage){
if($myPage['id']==$i) {
    $da = "data";
    $text = "helloworld";
    $myPage->$da ="<![CDATA[{$text}]]>"; //line number 
    $xml->asXML('demo.xml');
}

как я могу поместить строку так, как она есть в файле xml?


person sandeepKumar    schedule 11.08.2012    source источник


Ответы (1)


SimpleXML не очень хорошо обрабатывает CDATA. Если вы хотите записать CDATA, вам необходимо использовать объекты DOM. Например:

$xml = new DOMDocument();
$xml->load('demo.xml');
$i = 2;

foreach ($xml->getElementsByTagName('Page') as $page) {
    if ($page->attributes->getNamedItem('id')->value == $i) {
        $da = 'data';
        $text = 'helloworld';

        $data = $xml->createElement($da);
        $data->appendChild($xml->createCDATASection($text));

        $page->appendChild($data);
    }
}

Если вы хотите продолжать использовать SimpleXML, вы можете загрузить только тот элемент, в который хотите записать CDATA, как объект DOM.

$xml = simplexml_load_file('demo.xml');
$i = 2;

foreach ($xml->Page as $page) {
    if ($page['id'] == $i) {
        $da = 'data';
        $text = 'helloworld';
        $page->$da = '';

        $node = dom_import_simplexml($page->$da);
        $dom = $node->ownerDocument;
        $node->appendChild($dom->createCDATASection($text));
    }
}

$xml->asXML('demo.xml');
person JamesArmes    schedule 23.08.2012
comment
Нет, я применил это, но не работал, поэтому я не согласился - person sandeepKumar; 25.09.2012
comment
@skumar Не могли бы вы рассказать о том, что не сработало? Если бы вы могли предоставить более подробную информацию, возможно, я мог бы очистить свой ответ, чтобы решить ваши проблемы. - person JamesArmes; 25.09.2012