Как да декодирам 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 /bg/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› и искам да го вмъкна между ‹variants›‹/variants›, затова използвам 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