Объекты 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 ответа:
На самом деле, это было именно то, что мне нужно было сделать:
Как удержать 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.