1.xml基本介紹
知識點 | 核心內容 | 重點 |
XML定義 | 可擴展標記語言,用于數據存儲和傳輸 | 與HTML的區別(HTML用于展示,XML用于結構化數據) |
XML用途 | 1. 配置文件(Spring的beans.xml、Tomcat的server.xml); 2. 數據交換(早期替代方案,現多用JSON); 3. 小型數據庫(如舊版QQ聊天記錄存儲) | 配置文件場景(Spring/Maven/MyBatis) vs. 數據傳輸場景(JSON更主流) |
XML技術解析 | 解析技術:DOM/SAX(老韓重點講解DOM) | DOM解析(樹形結構) vs. SAX解析(事件驅動) |
XML現狀 | 當前主要作用:配置文件(如Tomcat端口配置、Spring Bean管理) | 與JSON的對比(XML更復雜,JSON更輕量) |
XML層級關系 | 描述復雜數據關系(如《紅樓夢》家族樹) | 嵌套標簽的父子節點邏輯 |
XML配置文件示例 | 1. Tomcat的server.xml(端口配置); 2. Maven的pom.xml(依賴管理) | 標簽屬性(如<Connector port="8080">) |
2.xml快速入門
知識點 | 核心內容 | 重點 |
XML基礎概念 | XML是可擴展標記語言,標簽可自定義(如<students>、<student>),與HTML預定義標簽不同 | 根元素唯一性(如<students>為根節點,僅能有一個) |
XML文檔結構 | 包含聲明(<?xml version="1.0" encoding="UTF-8"?>)、根元素、子元素層級(如<student>下嵌套<name>、<age>) | 屬性與子元素區別(如ID="100"是屬性,<name>是子元素) |
XML特性 | 可擴展性(可自由添加標簽如<gender>)、層級化數據表示(類似DOM樹結構) | 與HTML對比(XML標簽自定義,HTML標簽固定) |
XML語法規范 | 標簽需正確閉合(如<name>Jack</name>),錯誤示例:未閉合標簽會報錯(start tag not closed) | 編碼聲明重要性(encoding="UTF-8"避免亂碼) |
XML應用場景 | 存儲結構化數據(如學生信息),支持跨平臺數據交換 | 與JSON對比(XML更適合復雜層級數據) |
3.xml語法(1)
知識點 | 核心內容 | 重點 |
XML文檔聲明 | 必須放在文件第一行,包含版本(如version="1.0")和編碼(如utf-8) | 聲明格式嚴格性(不可隨意放置) |
XML元素 | 標簽及其內容(如<student>和</student>) | 元素嵌套規則與閉合要求 |
XML屬性 | 標簽內的附加信息(如id="001") | 屬性值需用引號包裹(單/雙引號均可) |
XML注釋 | 格式為<!-- 注釋內容 -->,與HTML風格一致 | 注釋不可嵌套 |
CDATA區 | 用于處理特殊字符(如<![CDATA[內容]]>) |
4.xml語法(2)
知識點 | 核心內容 | 注意事項 | 示例演示 |
根元素規則 | 每個XML文檔必須有且僅有一個根元素,需完全包含其他所有元素 | 多根元素會報錯(multiple root elements) | 錯誤示例:<emails>...</emails><students>...</students> |
標簽格式 | 開始標簽與結束標簽需成對出現;空標簽可簡寫為<tag/> | 交叉嵌套會導致語法錯誤(如<a><b></a></b>) | 合法空標簽:<city name="北京"/> |
命名規則 | - 區分大小寫; - 禁止數字開頭; - 禁止空格/冒號; - 可用下劃線連接 | Email與email視為不同標簽;1job無效 | 合法命名:<book_name>三國演義</book_name> |
術語等價性 | 標簽(Tag)、元素(Element)、節點(Node)在XML中常指同一概念 | 不同場景下術語偏好不同(解析時多用“節點”) | 示例:<student>可稱標簽/元素/節點 |
嵌套原則 | 子元素需合理嵌套在父元素內,禁止交叉嵌套 | 錯誤示例:<school><address></school></address> | 正確嵌套:<school><address>...</address></school> |
5.xml語法(3)
知識點 | 核心內容 | 重點 |
XML屬性基本語法 | 屬性與元素的關系、引號使用規則(雙引號/單引號交替使用) | 屬性值引號嵌套規則(含單引號用雙引號包裹,反之亦然) |
屬性命名規范 | 同一元素內屬性名稱必須唯一(區分大小寫) | 大小寫敏感特性(ID與id視為不同屬性) |
屬性值限制 | 禁止使用@符號、禁止重復定義同名屬性 | 特殊字符處理(同時含單雙引號需規避) |
多屬性應用 | 單個元素可包含多個不同屬性(如id+class+sex) | 屬性與子元素區別(屬性非子節點) |
實際案例演示 | student元素示例(id沖突演示、大小寫區分驗證) | 復合引號場景處理(代碼片段實操演示) |
6.xml語法(4)
知識點 | 核心內容 | 重點 |
XML注釋規則 | 注釋不能嵌套,位置固定 | 嵌套會導致解析錯誤 |
CDATA節的作用 | 將內容強制識別為普通文本(避免XML解析引擎執行) | <![CDATA[...]]> 的語法結構 |
CDATA語法規則 | 尖括號+嘆號+雙層中括號包裹內容(<![CDATA[內容]]>) | 禁止嵌套和包含]]>終止符 |
CDATA應用場景 | 存放含XML敏感字符的腳本/代碼(如<script>標簽) | 與普通文本轉義字符的對比 |
語法記憶技巧 | 類比注釋結構(<!-- -->替換為中括號+CDATA) | 中括號層數匹配易混淆 |
7.xml語法(5)
知識點 | 核心內容 | 重點 |
XML轉義字符 | 使用轉義形式顯示特殊字符的原始樣式(如 <→<、>→>、&→&) | 區分HTML與XML轉義字符的異同 |
XML格式規范 | 聲明語句、唯一根源素、大小寫敏感、屬性值引號、標記成對/空標記閉合、正確嵌套 | 根源素唯一性和交叉嵌套報錯 |
DOM解析應用 | 通過程序對XML文件進行增刪改查(如修改年齡、刪除節點) | 遍歷修改值與節點刪除操作的代碼實現 |
XML與HTML轉義對比 | 兩者均需轉義特殊字符,但具體語法可能不同(如引號轉義") | 混淆XML/HTML轉義符號的書寫格式 |
8.xml解析技術介紹、
知識點 | 核心內容 | 重點 |
DOM破解技術 | 使用dom forge庫解析XML/HTML文檔,通過DOM樹實現增刪改查操作 | dom forge與原生DOM、SAX解析技術的區別 |
XML解析原理 | 標記型文檔(XML/HTML)被映射為DOM樹結構,通過Java技術操作節點 | DOM樹的形成與節點層級關系 |
解析技術演進 | 早期JDK的DOM/SAX → jDOM → dom forge(主流) | 技術迭代原因及適用場景對比 |
文檔工具使用 | 本地文檔路徑:dom forge-1.6.1/docs/index.html(需瀏覽器打開) | 版本兼容性(1.x與2.x差異) |
核心類與方法 | Element類提供addChild()、getText()等方法操作節點 | 方法調用時的IO流與OOP思想應用 |
安卓相關技術 | Pool解析技術(僅限安卓開發,與Java無關) | 與其他解析技術的橫向對比 |
9.DOM4J介紹
知識點 | 核心內容 | 重點 |
DOM解析概念 | DOM破解是一個簡單靈活的開放源代碼庫,主要用于解析和處理XML文件 | 區分DOM解析與其他XML解析方式 |
DOM Forge特點 | 優秀且廣泛使用的XML解析庫,支持多種XML操作 | 新版舊版區別僅在于JDK適配 |
DOM Forge下載 | 官網提供多個版本下載(16/20/21等),下載后得到zip文件 | 版本選擇不影響基本功能 |
文檔學習能力 | 強調程序員應具備通過官方文檔學習新技術的能力 | 文檔學習與百度搜索的區別 |
Document對象獲取方式 | 1. SAXReader解析XML文件; 2. 解析XML格式字符串; 3. 主動創建Document對象 | 三種方式的應用場景差異 |
XML文件操作 | 重點講解查詢操作,簡要介紹增刪改操作 | 查詢操作的具體實現方式 |
實際應用場景 | 1. 解析現有XML文件; 2. 處理網絡傳輸的XML數據; 3. 動態生成XML文件 | 不同場景下的技術選擇 |
技術重要性 | 強調XML解析技術仍具實用價值,是完整知識體系的一部分 | 新技術環境下傳統技術的定位 |
10.加載xml文件
知識點 | 核心內容 | 重點 |
DOM4J解析XML文件 | 使用SAXReader加載XML文件,生成Document對象,分析其底層結構(根元素rootElement、子節點content與elementData數組) | 換行符被解析為文本節點(導致elementData數組長度與實際元素數量不一致) |
XML文檔結構解析 | Document→rootElement→content→elementData層級嵌套,通過element逐層獲取子節點(如name、age) | 屬性與文本值的存儲位置(如student節點的id屬性與name節點的文本值小龍女) |
Debug技巧 | 通過斷點調試觀察Document對象成員屬性(如DefaultDocument類實例、rootElement的content數組) | 節點類型混淆(元素節點Element vs 文本節點Text) |
XML節點遍歷邏輯 | 從根元素遞歸遍歷子節點,過濾無效文本節點(如換行符\n),定位目標元素(如student下的name) | 數組索引與實際元素對應關系(如elementData[1]對應第一個有效student節點) |
11.遍歷xml指定元素
知識點 | 核心內容 | 重點 |
XML遍歷方法 | 通過document.getRootElement()獲取根節點,再使用elements("student")提取學生列表,循環處理子節點數據 | 區分element()與elements()方法的使用場景(單節點 vs 多節點) |
節點數據提取 | 逐層獲取子節點(如student.element("name")),通過getText()讀取文本內容 | 注意處理空節點或異常格式,避免NullPointerException |
代碼調試技巧 | 通過斷點分析content結構,驗證節點層級與數據位置(如name節點下content存儲實際值) | 理解XML解析中隱式節點(如換行符\n)的影響 |
OOP編程思維 | 強調“方法必然存在”的面向對象設計原則(如rootElement提供標準API) | 泛型List<Element>的類型安全使用 |
學生信息輸出 | 拼接name、age、gender等字段,格式化展示(換行/空格分隔) | 多字段處理時注意數據對齊與可讀性 |
12.指定讀取xml元素
知識點 | 核心內容 | 重點 |
XML文件指定讀取 | 通過索引直接獲取特定節點(如elements.get(0)) | 強制類型轉換(Object轉Element) |
元素屬性獲取 | 使用attributeValue()方法直接讀取唯一屬性 | 屬性名必須與XML標簽完全一致 |
多層級數據提取 | 通過element().element()鏈式調用獲取嵌套數據 | resume字段漏寫getText()導致輸出異常 |
XPath技術 | 支持直接從根節點定位深層元素(未展開講解) | 與DOM4J組合使用可實現精準定位 |
異常處理機制 | 方法聲明處使用throws統一處理異常 | 未展示具體異常捕獲邏輯 |
對象類型驗證 | 通過接口實現關系確認強制轉換安全性(Element接口) | 需明確運行時類型匹配 |
13.DOM4J增刪改操作
知識點 | 核心內容 | 重點 |
XML節點讀取 | 通過DOM解析獲取指定學生信息 | 節點索引從0開始計數 |
XML節點添加 | 創建新節點并掛載到根節點 | 必須通過父節點添加子節點 |
XML節點刪除 | 通過父節點移除指定子節點 | 不能直接刪除自身節點 |
XML節點修改 | 遍歷節點并更新屬性值 | 字符串與數值類型轉換問題 |
DOM操作原理 | 內存修改需通過IO流持久化 | 內存操作與文件同步機制 |
Java IO流應用 | 使用FileOutputStream寫入XML | 字節流與字符流區別 |
節點層級關系 | parent-child節點操作邏輯 | 多級節點訪問路徑 |
14.DOM4J練習
根據XML文件中book元素的數量創建對應數量的Book對象
知識點 | 核心內容 | 重點 |
XML文件解析與對象映射 | 根據books.xml文件創建對應的Book對象,動態解析節點數量與屬性 | 節點遍歷邏輯 vs 對象屬性映射 |
面向對象編程實踐 | 定義Book類(含書名、作者、價格等字段),通過XML數據實例化對象 | 類屬性與XML標簽的命名一致性 |
集合框架應用 | 可選將生成的Book對象存入集合(如List<Book>) | 集合類型選擇(ArrayList/LinkedList) |
實現步驟 | 1. 遍歷XML的book元素; 2. 提取元素信息; 3. 創建Book對象 | 動態節點數量處理 |
15.DOM4J練習實現
知識點 | 核心內容 | 重點 |
XML文件解析(DOM方式) | 通過Document.getElementsByTagName("book")遍歷所有<book>元素,提取子節點(書名、作者、價格)及屬性(ID) | 需注意: 1. 節點名稱需與XML標簽嚴格匹配 2. 字符串到數值的轉換(Integer.parseInt()/Double.parseDouble()) |
XML文件結構 | 示例: xml<br><book id="100"><br> <name>西游記</name><br> <author>吳承恩</author><br> <price>80</price><br></book> | 易忽略: 1. 根節點與嵌套層級 2. 屬性與子元素的區別(attributeValue("id") vs elementText("name")) |
Java對象映射 | 將XML數據轉為Book對象: - 定義包含id(Integer)、name(String)、price(Double)的類 - 通過setter方法賦值 | 關鍵操作: 1. 類型轉換異常處理 2. toString()重寫用于調試輸出 |
DOM樹底層結構 | 強調文檔對象模型(樹形結構): - 根節點→子節點→屬性/文本節點 - 斜杠路徑表示層級關系 | 重點: DOM樹的增刪改查邏輯均基于節點層級關系 |