XML 中包含特殊字符(如 <, >, &)或需保留原始格式的文本時,必須使用 CDATA 區塊。本文演示如何用 DOMDocument 正確創建並插入 CDATA 節點。
<?php
$dom = new DOMDocument("1.0");
header("Content-Type: text/plain"); // 便於瀏覽器查看源碼
// 創建根元素
$root = $dom->createElement("toppings");
$dom->appendChild($root);
// 普通子元素與屬性
$item = $dom->createElement("item");
$root->appendChild($item);
$text = $dom->createTextNode("pepperoni");
$item->appendChild($text);
$price = $dom->createAttribute("price");
$item->appendChild($price);
$priceValue = $dom->createTextNode("4");
$price->appendChild($priceValue);
// 關鍵:創建 CDATA 區塊
$cdata = $dom->createCDATASection(" Customer requests that pizza be sliced into 16 square pieces ");
$root->appendChild($cdata);
// 處理指令
$pi = $dom->createProcessingInstruction("pizza", "bake()");
$root->appendChild($pi);
echo $dom->saveXML();
?>
<toppings>
<item price="4">pepperoni</item>
<![CDATA[ Customer requests that pizza be sliced into 16 square pieces ]]>
<?pizza bake()?>
</toppings>
<![CDATA[ ... ]]> 作為文本節點插入會被轉義,必須用 createCDATASection()。誤以為
createTextNode可直接放入 CDATA 內容 —— 它會將<轉為<,破壞原始數據。
掌握 DOMDocument 的 CDATA 操作,讓 XML 生成既標準又靈活。