Объекты SimpleXML, CDATA и HTML


Я рву на себе волосы, пытаясь впервые работать с "простым" XML. Я создаю небольшую CMS для сайта на основе Flash, и содержимое хранится в XML-файле. Моя проблема заключается в том, что многие из полей копирования являются полями XML CDATA. с одной стороны, с помощью:

$xml = simplexml_load_file($file, 'SimpleXMLElement', LIBXML_NOCDATA);

Я могу вытащить данные из этого узла, и теги CDATA будут удалены. Мои проблемы возникают при попытке сохранить данные с помощью:

file_put_contents($file, $xml->asXML());

Задачи следующие:

A) теги интерпретируются с их HTML-сущностью аналоги. Я не хочу, чтобы это случилось. Я предполагаю, что это происходит из метода asXML, потому что даже если я делаю html_entity_decode на данных $_POST, он все равно преобразуется.

B) из-за вышесказанного, нет никакого способа добавить теги CDATA, потому что они также имеют свои преобразованные символы.

SimpleXML до сих пор был для меня чем угодно, только не простым. Кто-нибудь сталкивались с этим?

2 2

2 ответа:

На самом деле, это было именно то, что мне нужно было сделать:

Как удержать DOMDocument от сохранения

Хотя переливание руководства по api DOM дало мне кое-что новое, что я хотел бы узнать для дальнейшего использования.

Раньше я не использовал simpleXML, но если ваша проблема заключается в том, что ваши данные сохраняются в XML-кодировке, то Flash может конвертировать XMLEncoded данные в XML-объекты изначально. Вы можете загрузить свои данные и просто передать их в новый XML-объект следующим образом:

var ldr:URLLoader = new URLLoader( new URLRequest('./test.xml') ); ldr.addEventListener( Event.COMPLETE, handleLoaded );

Функция handleLoaded (e: событие): void { var xml: XML = новый XML (например, target.данные); }

И у вас будет собственный Flash XML-объект.

Если вы используете AS2, то вам нужно будет использовать объект LoadVars, чтобы загрузите данные, но вам нужно будет использовать событие onData (Не onLoad), чтобы захватить вашу XML-кодированную строку и передать ее объекту XML.

Не уверен, что это решит вашу проблему, но это может быть полезно.