跨語言、跨平台數據交換標準:XML 必考知識體系
XML(可擴展標記語言)雖被 JSON 取代大部分 API 場景,但在企業級系統集成、配置文件、文檔標記、SOAP/WebService、辦公文檔格式(OOXML/ODF)中仍佔主導。本文梳理 10 道高頻面試題,涵蓋基礎概念、驗證、查詢、轉換、解析、命名空間、CDATA、數據綁定。
題目與標準答案速覽
- XML 是什麼? 可擴展標記語言,自定義標籤,用 DTD/Schema 規範結構,主用於異構系統數據交換。
- DTD vs XML Schema 差異? DTD 非 XML 寫作、類型弱;Schema 本身是 XML、支援豐富數據類型、命名空間、繼承,為現代標準。
- XPath 是什麼? XML 路徑語言,用於節點選取、值提取,類似 SQL 查詢 XML,語法如
//book[@id='1']/title。
- XSLT 是什麼? XML 轉換語言,將 XML 轉為 HTML/其他 XML/文本,基於規則模板、大量遞歸,由引擎(Saxon/Xalan)執行。
- 元素 vs 屬性? 元素承載結構化數據(可巢狀),屬性承載元資料(扁平、唯一),如
<Order id="123"><Price>2300</Price></Order>。
- 什麼是 Well-formed XML? 語法正確:單一根元素、標籤正確嵌套閉合、屬性值加引號、特殊字符轉義。否則解析器拒絕處理。
- XML 命名空間作用? 避免同名標籤衝突,類似 Java package。宣告
xmlns:prefix="URI",使用 <prefix:tag>。
- DOM vs SAX 解析器差異? DOM 樹形載入記憶體、隨機訪問、耗記憶體;SAX 事件驅動流式、單向、低記憶體、適合大文件。
- CDATA 是什麼? 字符數據區塊
<![CDATA[ ... ]]>,內容不被解析器解析,用於嵌入腳本、HTML、含特殊字符文本。
- Java XML 數據綁定? 將 XML 與 Java 物件雙向映射。JAXB(標準 API)、XMLBeans、JiBX。優勢:用物件操作 XML,免手寫解析邏輯。
進階補充:現代 XML 處理最佳實踐
- StAX (Streaming API for XML):JSR 173,游標/迭代器風格,介於 DOM/SAX 之間,可讀可寫、記憶體可控,JDK 6+ 內建。
- Schema 驗證:
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(source).newValidator().validate(streamSource)。
- XPath 注入防範:參數化 XPath(
XPathExpression + 變量綁定),避免字符串拼接。
- 大文件處理:SAX/StAX + 暫存文件,或
VTD-XML(索引式、隨機訪問、高效能)。
- JSON 轉 XML:
org.json.XML.toString(jsonObj) 或 Jackson XmlMapper 雙向轉換。