Как декодировать объекты HTML при сохранении файла XML?

У меня есть следующий код в моем PHP-скрипте:

$str = '<item></item>';
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->formatOutput = true;
$xml->load('file.xml');
$items = $addon->getElementsByTagName('items')->item(0);
$items->nodeValue = $str;
$xml->save('file.xml');

В сохраненном файле .xml я вижу следующее:

&lt;item&gt;&lt;\item&gt;

Как я могу сохранить его в файле XML без кодирования объектов HTML?


person user1870041    schedule 02.12.2012    source источник
comment
Если предполагается, что $str является текстовым значением, это совершенно правильно, его необходимо экранировать. Вы действительно пытаетесь добавить новый элемент <item> в файл XML?   -  person deceze♦    schedule 02.12.2012
comment
проверьте stackoverflow.com/questions/12330571/ и php.net/manual /en/function.htmlentities.php#106535   -  person NullPoiиteя    schedule 02.12.2012
comment
Спасибо за советы. На самом деле это мне не помогает, в моем XML есть: ‹variants›‹/variants›, и я хочу изменить его следующим образом: ‹variants›‹item id=1›item‹/item›‹/variants›, в $str у меня есть ‹item id=1›item‹/item›, и я хочу вставить его между ‹variant›‹/вариантами›, поэтому я использую nodeValue   -  person user1870041    schedule 02.12.2012


Ответы (1)


Используйте DOMDocumentFragment:

<?php

$doc = new DOMDocument();
$doc->load('file.xml'); // '<doc><items/></doc>'

$item = $doc->createDocumentFragment();
$item->appendXML('<item id="1">item</item>');

$doc->getElementsByTagName('items')->item(0)->appendChild($item);
$doc->save('file.xml');

Если вы добавляете к корневому элементу, используйте $doc->documentElement->appendChild($item); вместо getElementsByTagName.

person Alf Eaton    schedule 10.09.2013