隨著 Web 應用複雜度提升,HTML 的結構描述局限(不可擴展、鏈路脆弱、搜索低效、多語言弱支援)日益凸顯。XML 作為可擴展標記語言,配合 XSLT、XPath、DOM、Schema 等技術棧,為「內容與表現分離」「多端適配」「數據互操作」提供了標準化解決方案。本文系統梳理 XML 核心技術體系,並針對 PHP 開發場景給出架構建議。
| 特性 | DTD | XML Schema (XSD) |
|---|---|---|
| 語法 | 非 XML,獨立語法 | 純 XML,可用 XML 工具處理 |
| 數據類型 | 僅字符串 | 內建 44 種類型(integer, date, boolean...)支援自定義派生 |
| 擴展性 | 封閉,難以擴展 | 開放內容模型,支援 <xsd:extension> 擴展 |
| 命名空間 | 不支援 | 原生支援 targetNamespace,單文檔可引用多 Schema |
| 適用場景 | 簡單文檔、歷史系統相容 | 企業級數據交換、Web Services、配置驗證 |
<a>,支援雙向鏈接、多端點鏈接、鏈接庫、語義標註(role/arcrole)。//book[@category='web']/title 精準定位節點集,XSLT/XPointer 基石。<xsl:template>、<xsl:include/import>),可將 XML 轉為 HTML、PDF、SVG、純文本等任意格式。DOMDocument、DOMXPath,性能優於早期 SAX 解析器。解決多 XML 文檔合併時標籤衝突:<book:title xmlns:book="https://example.com/book">。PHP DOMDocument 完整支援命名空間註冊與查詢。
<?php
// 1. 業務邏輯產出純數據 XML
$dom = new DOMDocument('1.0', 'UTF-8');
$root = $dom->createElement('catalog');
foreach ($books as $book) {
$b = $dom->createElement('book');
$b->setAttribute('isbn', $book['isbn']);
$b->appendChild($dom->createElement('title', $book['title']));
$b->appendChild($dom->createElement('author', $book['author']));
$b->appendChild($dom->createElement('price', $book['price']));
$root->appendChild($b);
}
$dom->appendChild($root);
// 2. 載入 XSLT 樣式表
$xsl = new DOMDocument;
$xsl->load('catalog.xsl');
$proc = new XSLTProcessor;
$proc->importStylesheet($xsl);
// 3. 輸出 HTML
echo $proc->transformToXML($dom);
?>
SimpleXML 輕量讀寫(適合結構固定、文檔較小)。XMLReader/XMLWriter 流式處理大文件(GB 級),恆定內存佔用。$dom->schemaValidate('schema.xsd') 確保數據契約合規。同一 XML 數據源,配合不同 XSLT 樣式表:
web.xsl → 響應式 HTML5amp.xsl → Google AMP 頁面rss.xsl → RSS 2.0 / Atom Feedpdf.xsl → XSL-FO → Apache FOP 生成 PDFxsltproc (libxslt)、Saxon-HE (XSLT 3.0 支援)xsd.exe (生成類)php-xml、php-dom、php-simplexml、php-xslXML 雖非銀彈,但在「結構化數據交換」「多格式發布」「長期歸檔」領域仍無可替代。PHP 成熟的 XML 生態(DOM、XSLT、Schema、XPath)讓這套方案落地極低成本。建議新專案評估:若需強契約、多端輸出、異構系統集成,XML+XSLT 架構優於純 JSON+模板引擎;若僅為內部 API,JSON 更輕量高效。