說明 XML 中 CDATA 區段的語法、用途與解析行為,展示如何在 XML 包含特殊字元(如 &、<、>)時避免解析錯誤,並對比 PCDATA 差異。
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<class>
<student id="No<001" haha="美女">
<name>小喬</name>
<sex>女</sex>
<age>23</age>
<info>
<![CDATA[
內容部分&*&$#^@*(#))$#*%#
]]>
</info>
</student>
<student>
<name>周瑜</name>
<sex>男</sex>
<age>26</age>
</student>
</class>
<![CDATA[]]>]]> 序列(否則視為結束)。PCDATA (Parsed Character Data):預設的文字節點類型,解析器會處理實體參考(如 < → <)、展開參數實體。在 DTD 中用 #PCDATA 宣告元素內容模型。
<?php
$xmldoc = new DOMDocument();
$xmldoc->load("class.xml");
$info = $xmldoc->getElementsByTagName("info")->item(0);
echo $info->nodeValue; // 直接輸出 CDATA 內的原始文字
?>
DOM 會自動處理 CDATA,nodeValue 直接回傳未解析的原始字串。
]]>,請拆分為 ]]> + <![CDATA[ 兩段。善用 CDATA 可簡化特殊字元處理,讓 XML 既保有結構化優勢,又能靈活攜帶任意格式資料。