2018年7月10日 星期二

PHP SimpleXMLElement 輸出的 XML 增加 CDATA

使用 SimpleXMLElement 產生 XML 時,若遇到內容有特殊字元,
SimpleXMLElement 不會自動轉換特殊字元, 也不會自動加上 CDATA
所以內容有特殊字元時,若沒先處理再傳給 SimpleXMLElement,便會出錯。

若想使用加上 CDATA 的方式,可如以下幫 SimpleXMLElement 加上 addCData 功能。
class SimpleXMLExtended extends \SimpleXMLElement {
    /**
     * 將節點的值加上 CDATA
     * @param string $cdata_text 節點的值
     */
    public function addCData($cdata_text) {
        $node = dom_import_simplexml($this);
        $no = $node->ownerDocument;
        $node->appendChild($no->createCDATASection($cdata_text));
    }
}
使用
$sxe = new \SimpleXMLExtended('<xyz></xyz>');
$sxe->addChild('aa')->addCData('test');
$xml = $sxe->asXML();
//輸出結果
//<?xml version="1.0"?>
//<xyz><aa><![CDATA[test]]></aa></xyz>


參考:
php - How to write CDATA using SimpleXmlElement? - Stack Overflow

沒有留言:

張貼留言