我正在尝试使用CDATA
标记导出xml。我使用以下代码:
$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);
}
答案 0 :(得分:1)
如何添加CData部分的简短示例,请注意它跳过使用DOMDocument添加CData部分的方式。代码构建<product>
元素,$xml_product
有一个新元素<mychild>
在其中创建。然后使用dom_import_simplexml
将此newNode导入DOMElement。然后,它使用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>