學習日記-XML-day55-9.14

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轉義字符

使用轉義形式顯示特殊字符的原始樣式(如 <→&lt;、>→&gt;、&→&amp;)

區分HTML與XML轉義字符的異同

XML格式規范

聲明語句、唯一根源素、大小寫敏感、屬性值引號、標記成對/空標記閉合、正確嵌套

根源素唯一性交叉嵌套報錯

DOM解析應用

通過程序對XML文件進行增刪改查(如修改年齡、刪除節點)

遍歷修改值與節點刪除操作的代碼實現

XML與HTML轉義對比

兩者均需轉義特殊字符,但具體語法可能不同(如引號轉義&quot;)

混淆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樹的增刪改查邏輯均基于節點層級關系

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/97933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/97933.shtml
英文地址,請注明出處:http://en.pswp.cn/web/97933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【系統架構設計(27)】信息安全技術集成

文章目錄一、本文知識覆蓋范圍二、信息安全基礎要素詳解1、機密性保障技術2、完整性驗證技術3、可用性保障技術4、可控性管理技術5、可審查性追溯技術三、網絡安全威脅與防護策略1、非授權訪問防護2、拒絕服務攻擊防護3、惡意軟件傳播防護四、加密技術體系與應用1、對稱加密技術…

什么是 SaaS 安全?

什么是 SaaS 安全&#xff1f; SaaS 安全專注于保護云中的數據、應用程序和用戶身份。它旨在應對基于云的軟件所面臨的挑戰&#xff0c;以確保信息的安全性和可用性。SaaS 安全致力于降低未授權訪問、數據泄露等風險&#xff0c;同時增強 SaaS 應用程序的安全性。 SaaS 安全不僅…

mysql和postgresql如何選擇

h5打開以查看 簡單來說&#xff1a; MySQL&#xff1a;更像是一個“快速、可靠的工匠”&#xff0c;注重速度、簡單和穩定性&#xff0c;尤其在讀操作密集的Web應用中是經典選擇。 PostgreSQL&#xff1a;更像是一個“功能強大的學者”&#xff0c;追求功能的完備性、標準的符…

Redis最佳實踐——安全與穩定性保障之數據持久化詳解

Redis 在電商應用的安全與穩定性保障之數據持久化全面詳解一、持久化機制深度解析 1. 持久化策略矩陣策略觸發方式數據完整性恢復速度適用場景RDB定時快照分鐘級快容災備份/快速恢復AOF實時追加日志秒級慢金融交易/訂單關鍵操作混合模式RDBAOF同時啟用秒級中等高安全要求場景無…

Data Augmentation數據增強

目錄 數據增強是什么 為什么數據增強 數組增強分類 有監督數據增強 無監督數據增強 數據增強是什么 數據增強又稱數據擴增&#xff0c;是一種通過應用合理且隨機的變換&#xff08;例如圖像位移、旋轉&#xff09;來增加訓練集多樣性的技術。讓有限的數據產生等價于更多數…

OpenCV:特征提取

目錄 一、特征提取核心概念&#xff1a;什么是圖像特征&#xff1f; 二、實戰 1&#xff1a;Harris 角點檢測 1.1 角點的物理意義 1.2 Harris 算法原理 1.3 OpenCV 實戰代碼與解析 1.4 結果分析 三、實戰 2&#xff1a;SIFT 特征提取 3.1 SIFT 算法核心優勢 3.2 SIFT…

MySQL的查找加速器——索引

文章目錄 目錄 前言 一、基礎概念&#xff1a;什么是 MySQL 索引&#xff1f; 二、底層數據結構&#xff1a;為什么 InnoDB 偏愛 B 樹&#xff1f; B 樹的結構特點&#xff08;以短鏈接表short_link的short_code索引為例&#xff09;&#xff1a; B 樹的優勢&#xff1a…

【Vue2手錄11】Vue腳手架(@vue_cli)詳解(環境搭建+項目開發示例)

一、前言&#xff1a;為什么需要 Vue 腳手架&#xff1f; 手動搭建 Vue 項目存在諸多痛點&#xff08;原筆記提及&#xff09;&#xff1a; 依賴管理復雜&#xff1a;需手動下載 Vue、Babel、Webpack 等工具&#xff0c;處理版本兼容性。配置繁瑣&#xff1a;Webpack 配置、E…

自簽發、CA機構簽發、SSH、SCP、RSYNC,SUDO詳解

一、為什么&#xff1f; 1. 自建CA為什么比Lets Encrypt強&#xff1f; 不能把CA放公網&#xff01;Lets Encrypt是給公網服務用的&#xff08;比如10.0.0.30的Web服務&#xff09;&#xff0c;但內網服務&#xff08;比如OpenVPN&#xff09;必須用自簽CA。 CA私鑰必須物理隔…

【Python】Python解決阿里云DataWorks導出數據1萬條限制的問題

【Python】Python解決阿里云DataWorks導出數據1萬條限制的問題一、前言二、腳本功能概述三、核心代碼解析**1. 環境配置與安全設置****2. 用戶配置區****3. 數據清洗函數****4. 核心邏輯**四、完整代碼演示五、總結一、前言 在日常數據分析工作中&#xff0c;團隊經常需要從阿…

計算機網絡(一)基礎概念

本篇文章為計算機網絡相關知識點整理及擴展 基于B站計算機網絡課程&#xff1a;https://www.bilibili.com/video/BV1p69tYZEvN/?spm_id_from333.1007.top_right_bar_window_history.content.click 如有錯誤&#xff0c;還望大家不吝指正 URL&#xff08;統一資源定位符&…

Git的工作區域和文件結構

Git的工作區域和文件結構 1. Git的工作區域2. Git的文件結構 打開.git文件&#xff0c;.git的文件結構如下&#xff1a; objects 存放已經提交的文件&#xff0c;也就是使用 git commit 進行操作后的文件。 index 存放已暫存的文件&#xff0c;也就是使用了 git add 進行操作后…

前端開發易錯易忽略的 HTML 的 lang 屬性

前言本文主要記錄&#xff1a;前端開發中&#xff0c;一個本人錯了好幾年&#xff0c;看似無關緊要的小錯誤&#xff1a;HTML 的 lang 屬性設置。正文HTML 的 lang 屬性在HTML中&#xff0c;lang屬性用于指定文檔的語言。這對于搜索引擎優化&#xff08;SEO&#xff09;、屏幕閱…

【GD32】 GPIO 超詳細總結 (江科大風格課件版)

GD32 GPIO 超詳細總結 (江科大風格課件版)第一部分&#xff1a;GPIO 是什么&#xff1f; 名稱&#xff1a;GPIO General Purpose Input/Output (通用輸入輸出口)作用&#xff1a;MCU與外部世界交互的橋梁。通過程序控制引腳輸出高、低電平&#xff0c;或者讀取引腳的電平狀態。…

《嵌入式硬件(八):基于IMX6ULL的點燈操作》

一、IMX6ULL啟動代碼.global _start_start:ldr pc, _reset_handlerldr pc, _undefine_handlerldr pc, _svc_handlerldr pc, _prefetch_abort_handlerldr pc, _data_abort_handlerldr pc, _reserved_handlerldr pc, _irq_handlerldr pc, _fiq_handler_undefine_handler:ldr pc, …

Spring Boot 調度任務在分布式環境下的坑:任務重復執行與一致性保證

前言在實際業務開發中&#xff0c;調度任務&#xff08;Scheduled Task&#xff09; 扮演著重要角色&#xff0c;例如&#xff1a;定時同步第三方數據&#xff1b;定時清理過期緩存或日志&#xff1b;定時發送消息或報告。Spring Boot 提供了非常方便的 Scheduled 注解&#xf…

剖析ReAct:當大模型學會“邊想邊做”,智能體的進化之路

你是否曾驚嘆于大語言模型&#xff08;LLM&#xff09;強大的推理能力&#xff0c;卻又對其“紙上談兵”、無法真正與世界交互而感到遺憾&#xff1f;你是否好奇&#xff0c;如何讓AI不僅能“說”&#xff0c;更能“做”&#xff0c;并且在做的過程中不斷思考和調整&#xff1f…

小型無人機傳感器仿真模型MATLAB實現方案

一、系統架構設計 無人機傳感器仿真模型需集成多物理場建模與數據融合模塊&#xff0c;典型架構包含&#xff1a; 動力學模型&#xff1a;六自由度剛體運動方程傳感器模型&#xff1a;IMU/GNSS/視覺/氣壓計數學建模數據融合層&#xff1a;卡爾曼濾波/EKF算法實現環境交互模塊&a…

hadoop集群

ssh-keygen -t rsassh-copyid 用戶名遠程服務器地址start-dfs.sh chown [選項] 新所有者[:新所屬組] 目標文件/目錄常用選項&#xff1a;-R&#xff1a;遞歸修改目錄下所有文件和子目錄的所有者&#xff08;處理目錄時常用&#xff09;-v&#xff1a;顯示修改過程的詳細信息-c&…

大模型入門實踐指南

大模型入門教程:從概念到實踐 大模型(Large Language Model, LLM)是當前人工智能領域的核心技術,其本質是通過大規模數據訓練、具備復雜語言理解與生成能力的深度學習模型。本教程將從基礎概念出發,帶你理解大模型的核心邏輯,并通過可直接跑通的代碼示例,快速上手大模型…