首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 與 XML 程式設計:從 HTML 侷限到 XML 技術架構完整解析

     編輯:PHP 相關知識

前言:為什麼需要 XML?

HTML 雖然簡單易學且普及度高,PHP 程式常嵌入 HTML 中執行。但隨著 Web 應用日益複雜,HTML 的短板愈發明顯:擴充性差、連結易失效、資料搜尋效率低、多國語言支援不足。XML(可擴充標記語言)的出現,提供了處理網路資料的通用標準方案,彌補了 HTML 的諸多不足。

一、HTML 的四大侷限性

  1. 擴充性差:無法自訂標籤處理數學、化學等特殊符號,發展受限
  2. 連結維護困難:URL 變更需手動修正,否則產生 404 錯誤,維護成本高
  3. 資料搜尋效率低:HTML 專注於顯示控制,同一資料在不同頁面格式不一,難以快速檢索
  4. 多位元組字元支援不足:中文等雙位元組語言在跨平台顯示易出現亂碼

針對這些問題,業界發展出 XML、CSS、DHTML 等替代技術。

二、XML 核心技術組成

1. DTD(文件型別定義)

定義 XML 內容模式、限制標籤資料範圍、定義屬性資料型別。缺點:非 XML 撰寫、擴充性差、資料型別有限。

2. XML Schema

功能類似 DTD 但更強大:

  • 內容模型開放可擴充
  • 支援整數、浮點數、布林值等豐富資料型別
  • 利用 Namespaces 關聯節點,單一 XML 可對應多個 Schema

3. XLink、XPath、XPointer

XML 連結與定址機制三劍客:

  • XLink:建立單向/多向複雜連結、註釋連結、概要連結
  • XPath:支援相對節點與節點集定位,用於 XSLT 與 XPointer
  • XPointer:針對文件內部結構(字串、段落)精確定位

4. CSS 與 XSL

XML 強調「內容與格式分離」:

  • CSS:層疊樣式表,HTML/XML 通用
  • XSL:XML 樣式語言,完全使用 XML 語法,功能遠超 CSS

5. DOM(文件物件模型)

跨平台、跨語言的程式介面,提供動態存取與更新文件內容、結構、樣式的能力。包含核心、HTML、XML 三層介面,核心部分建立底層物件集表示任意結構化文件。

6. Namespaces(命名空間)

以 URL 區分元素與屬性名稱集合,解決多個 XML 文件合併時的標籤衝突問題。

三、PHP 對 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()釋放解析器佔用記憶體

四、實戰案例:PHP 5 解析 XML 通訊錄

以下範例示範讀取 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 進行精準節點查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved