Я пытаюсь экспортировать XML с CDATA
теги. Я использую следующий код:
$xml_product = $xml_products->addChild('product');
$xml_product->addChild('mychild', htmlentities("<![CDATA[" . $mytext . "]]>"));
Проблема в том, что я получаю CDATA
теги <
а также >
сбежал с <
а также >
как следующее:
<mychild><![CDATA[My some long long long text]]></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);
}
Краткий пример того, как добавить раздел 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>
Других решений пока нет …