XML 作為跨平台資料交換標準,在企業級開發、Web Service、配置檔案中無處不在。面試常考核 XML 基礎、DTD/Schema、XPath、XSLT、解析器、命名空間等核心概念。本文精選 10 道高頻題並給出深度解析。
標準答案: Extensible Markup Language,可擴展標記語言。允許自定義標籤(如 <orders>),結構由 DTD/Schema 規範。主要用於異構系統間資料傳輸(如 Client-Server、企業整合)。
加分點: 強調「自描述」、「平台無關」、「文本基礎」,對比 HTML(預定義標籤、側重顯示)。
| 維度 | DTD | XML Schema (XSD) |
|---|---|---|
| 語法 | 非 XML 格式 | 本身即 XML 文件 |
| 資料型別 | 僅支援字串 | 豐富型別(int, date, decimal, boolean...) |
| 命名空間 | 不支援 | 原生支援 |
| 繼承/擴展 | 無 | 支援 complexType 延伸/限制 |
| 工具支援 | 基礎 | IDE 智能提示、驗證、代碼生成完善 |
結論: 新專案首選 XSD。
XML 路徑語言,用於在 XML 文件中定位節點(元素、屬性、文字)。語法類似檔案路徑:/root/order[@id='123']/price。核心軸:child、attribute、descendant、ancestor、following-sibling。常用函數:contains()、starts-with()、count()、position()。
XSL Transformations,XML 轉換語言。將 XML 轉為 XML/HTML/TEXT/其他格式。核心機制:模板匹配 + 遞歸處理。引擎(如 Saxon、Xalan)讀取 .xsl 樣式表指令執行轉換。典型應用:XML → HTML 報表、XML 格式互轉。
<Order id="123">
<Symbol>6758.T</Symbol>
<Price>2300</Price>
</Order>
id 是屬性,Symbol/Price 是元素。原則:資料本質用元素,元資料/識別碼用屬性。元素可巢狀、可重複、可混合內容;屬性扁平、唯一、不可巢狀。
語法正確:單一根元素、標籤正確巢狀閉合、屬性值加引號、特殊字元轉義(< > &)。不合格文件無法被解析器解析。
避免不同來源同名標籤衝突。語法:xmlns:prefix="URI"。範例:
<root xmlns:inst="https://inst.com">
<inst:phone><inst:number>837363223</inst:number></inst:phone>
</root>
類比 Java 套件名。解析器以「命名空間 URI + 區域名」唯一識別節點。
| 特性 | DOM (Document Object Model) | SAX (Simple API for XML) |
|---|---|---|
| 記憶體模型 | 整份文件載入樹狀結構 | 事件驅動,流式處理,不建樹 |
| 記憶體佔用 | 大(與文件大小成正比) | 極小(常數級) |
| 隨機存取 | 支援(任意節點跳轉) | 不支援(單向流) |
| 修改文件 | 容易(記憶體操作後序列化) | 困難(需自行建構輸出) |
| 適用場景 | 小檔案、需多次遍歷/修改 | 大檔案、單次順序讀取、記憶體受限 |
現代替代:StAX (Streaming API for XML)、JDOM、DOM4J、XOM 等更易用 API。
Character Data,標記為 <![CDATA[ ... ]]>。內容不被解析器解析,可包含任意字元(含 <、&、標籤),適合嵌入程式碼、腳本、含特殊字元的文字。注意:CDATA 內不可出現 ]]>。
將 XML 文件↔ Java 物件自動映射。標準 API:JAXB (Java Architecture for XML Binding)。註解驅動:@XmlRootElement、@XmlElement、@XmlAttribute。優勢:以物件導向方式操作 XML,避免手工 DOM/SAX 解析。替代方案:XMLBeans、JiBX、Simple XML、Jackson XML 模組。
XML 雖有冗長、解析效能較 JSON 低等缺點,但在標準化、驗證、命名空間、轉換(XSLT)、查詢(XPath/XQuery)等企業級特性上優勢明確。扎實掌握上述 10 題核心知識,足以應對 90% 的 XML 相關面試考點。