XML(可延伸標記語言)比 JSON 更早出現,雖然 JSON 贏了 API 世界,但 XML 遠遠沒有消失:SVG、RSS/Atom、Office 文件(.docx)、Android 版面、Maven pom.xml、SOAP 全都是 XML。會讀、會整理它,至今仍是實用技能。
XML 的結構
XML 用巢狀的元素(以標籤包起來)描述資料,元素可帶屬性:
<book id="42" lang="zh">
<title>哈比人</title>
<author>托爾金</author>
</book>
每個開標籤都要有對應的閉標籤(或自閉,<br/>),標籤必須正確巢狀,屬性值要加引號。任何一項出錯,文件就無法解析。
well-formed vs valid —— 一個重要區別
這兩個聽起來很像,其實不同:
- **格式正確(well-formed)**指 XML 遵守上述語法規則——標籤、巢狀、引號都對。任何 XML 解析器都能檢查。
- 有效(valid)指它還符合某個綱要(schema)(DTD 或 XSD),那定義了允許哪些元素與屬性,需要有綱要才能驗。
大多數線上工具——包含我們的——檢查的是 XML「格式正確」。這能抓到日常錯誤(沒閉合的標籤、多出來的 &),而那些正是實務上讓解析失敗的原因。
XML vs JSON:何時用哪個
- JSON 更輕量,是網頁 API 與程式讀取設定檔的預設。
- XML 在需要屬性、混合內容(文字與元素並存)、命名空間、註解,或某個生態系已標準化用它(SVG、RSS、Office 格式)時更合適。
與其說是競爭對手,不如說是解決不同問題的工具。
XML、JSON、HTML 並排比較
| 面向 | XML | JSON | HTML |
|---|---|---|---|
| 用途 | 儲存/傳輸資料 | 儲存/傳輸資料 | 呈現文件 |
| 標籤 | 自訂,可任意命名 | 無標籤(用大括號) | 固定一組(<p>、<div>) |
| 屬性 | 有 | 無(只有鍵) | 有 |
| 嚴格程度 | 必須格式正確 | 嚴格 | 寬鬆,瀏覽器會容錯 |
| 註解 | <!-- --> | 無 | <!-- --> |
XML 與 HTML 長得像,因為兩者都源自 SGML;但 XML 讓你自創標籤且語法嚴格,HTML 則是固定字彙、瀏覽器容忍馬虎的標記。XHTML 就是想讓 HTML 遵守 XML 規則的嘗試。
實際例子:RSS
RSS 訂閱其實就是用約定好標籤名的 XML:
<rss version="2.0">
<channel>
<title>我的部落格</title>
<item>
<title>第一篇</title>
<link>https://example.com/first</link>
</item>
</channel>
</rss>
SVG 圖檔也一樣——<svg> 文件就是 XML,你可以用文字編輯器打開、手動編輯。
常見陷阱
- 特殊字元要跳脫。 文字中有五個字元需要用實體表示:
<(<)、>(>)、&(&)、"(")、'(')。一個沒跳脫的&是訂閱源壞掉最常見的原因。 - XML 區分大小寫。
<Title>和<title>是不同元素,閉標籤必須完全一致。 - 只能有一個根元素。 格式正確的文件,最外層只能有唯一一個元素包住其餘全部。
因為 SVG 就是 XML,你手動編輯向量圖時也適用同一套整理方式——看我們的 PNG 轉 SVG 介紹。
在瀏覽器本機格式化與驗證
XML 格式化工具把雜亂的 XML 美化成好讀的縮排結構、壓回一行,並指出語法錯誤——全程在本機,再敏感的設定檔也不離開你的裝置。
相關工具
- 改處理 JSON?用 JSON 格式化。
- 要在 JSON 與 YAML 之間轉?試試 JSON ⇄ YAML。