php экспорт xml CDATA сбежал

Я пытаюсь экспортировать XML с CDATA теги. Я использую следующий код:

$xml_product = $xml_products->addChild('product');
$xml_product->addChild('mychild', htmlentities("<![CDATA[" . $mytext . "]]>"));

Проблема в том, что я получаю CDATA теги < а также > сбежал с &lt; а также &gt; как следующее:

 <mychild>&lt;![CDATA[My some long long long text]]&gt;</mychild>

но мне нужно:

<mychild><![CDATA[My some long long long text]]></mychild>

Если я использую htmlentities() Я получаю много ошибок, таких как tag raquo is not defined и т.д. … хотя в моем тексте нет таких тегов. Наверное htmlentities() пытается проанализировать мой текст внутри CDATA и преобразовать его, но я тоже не хочу.

Есть идеи, как это исправить? Спасибо.

UPD_1 Моя функция, которая сохраняет XML в файл:

public static function saveFormattedXmlFile($simpleXMLElement, $output_file) {
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML(urldecode($simpleXMLElement->asXML()));
$dom->save($output_file);

}

0

Решение

Краткий пример того, как добавить раздел CData, обратите внимание на то, как он использует DOMDocument для добавления раздела CData. Код создает <product> элемент, $xml_product есть новый элемент <mychild> создано в нем. Этот новый узел затем импортируется в элемент DOME с помощью dom_import_simplexml, Затем он использует DOMDocument createCDATASection метод, чтобы правильно создать соответствующий бит и добавляет его обратно в узел.

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><Products />');

$xml_product = $xml->addChild('product');
$newNode = $xml_product->addChild('mychild');
$mytext = "<html></html>";
$node = dom_import_simplexml($newNode);
$cdata = $node->ownerDocument->createCDATASection($mytext);
$node->appendChild($cdata);
echo $xml->asXML();

Этот пример выводит …

<?xml version="1.0" encoding="UTF-8"?>
<Products><product><mychild><![CDATA[<html></html>]]></mychild></product></Products>
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector