HTML 雖然簡單易學且普及度高,PHP 程式常嵌入 HTML 中執行。但隨著 Web 應用日益複雜,HTML 的短板愈發明顯:擴充性差、連結易失效、資料搜尋效率低、多國語言支援不足。XML(可擴充標記語言)的出現,提供了處理網路資料的通用標準方案,彌補了 HTML 的諸多不足。
針對這些問題,業界發展出 XML、CSS、DHTML 等替代技術。
定義 XML 內容模式、限制標籤資料範圍、定義屬性資料型別。缺點:非 XML 撰寫、擴充性差、資料型別有限。
功能類似 DTD 但更強大:
XML 連結與定址機制三劍客:
XML 強調「內容與格式分離」:
跨平台、跨語言的程式介面,提供動態存取與更新文件內容、結構、樣式的能力。包含核心、HTML、XML 三層介面,核心部分建立底層物件集表示任意結構化文件。
以 URL 區分元素與屬性名稱集合,解決多個 XML 文件合併時的標籤衝突問題。
PHP 內建 XML 解析器,PHP 4 提供 20 個解析函式。常用函式如下:
| 函式 | 用途 |
|---|---|
xml_parser_create() | 初始化新的 XML 解析器,支援 ISO-8859-1、US-ASCII、UTF-8 編碼 |
xml_parse() | 解析 XML 格式資料區塊 |
xml_set_element_handler() | 設定元素開始/結束標籤處理函式 |
xml_set_character_data_handler() | 設定字元資料處理函式 |
xml_get_error_code() | 取得解析錯誤代碼 |
xml_error_string() | 取得錯誤代碼的文字描述 |
xml_get_current_line_number() | 取得目前解析行號 |
xml_parser_free() | 釋放解析器佔用記憶體 |
以下範例示範讀取 address.xml 並以階層結構顯示內容:
<?php
// 輔助函式:讀取檔案內容至字串
function read_file($filename) {
$lines = file($filename);
$contents = "";
while (list($key, $value) = each($lines)) {
$contents .= $value;
}
return $contents;
}
// 起始標籤處理器
function start_element($parser, $name, $attrs) {
global $depth;
$spacer = "";
for ($i = 1; $i < $depth[$parser]; $i++) $spacer .= "->";
// 依深度設定顏色與字型大小
if ($depth[$parser] == 0) $font_color = "red";
else if ($depth[$parser] == 1) $font_color = "green";
else $font_color = "blue";
$font_size = 5 - $depth[$parser];
if ($font_size < 2) $font_size = 2;
echo "<font size=$font_size color=$font_color>";
echo "$spacer$depth[$parser]";
if ($depth[$parser] != 0) echo "、";
echo "$name<BR></font>";
$depth[$parser]++;
if ($depth[$parser] == 2) echo "<hr color=red size=1>";
}
// 結束標籤處理器
function end_element($parser, $name) {
global $depth;
$depth[$parser]--;
}
// 字元資料處理器
function character_data($parser, $data) {
// 處理標籤間的文字內容
}
// 主程式
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "start_element", "end_element");
xml_set_character_data_handler($xml_parser, "character_data");
$fp = fopen("address.xml", "r");
while ($data = fread($fp, 4096)) {
xml_parse($xml_parser, $data, feof($fp));
}
xml_parser_free($xml_parser);
?>
XML 以其擴充性、資料導向特性、跨平台能力,成為現代 Web 資料交換的核心標準。PHP 內建的 SAX 風格解析器雖屬事件驅動模型,但配合 DOM 操作可滿足大多數 XML 處理需求。實際開發中,建議根據文件大小選擇 SAX(大檔案)或 DOM(小檔案、需隨機存取)解析策略,並善用 XPath 進行精準節點查詢。