Javaweb - 7 xml

XML 是EXtensible Markup Language 的縮寫,翻譯過來就是可擴展標記語言。即,XML 和 HTML 一樣,都是標記語言,也就是說,它們的基本語法都是標簽。

?特點:

? ? ? ? 1. 可擴展:即 XML 是允許自定義格式的。但!這并不代表我們就可以隨便寫。

? ? ? ? 2. 在 XML 基本語法規范的基礎上,我們使用的第三方應用程序、框架等,會通過 XML 約束的方式,強制配置文件中可以寫什么,和怎么寫~

? ? ? ? 3. XML 基本語法的定位點:我們并不需要從零開始,一行一行的寫 XML 文檔,而是,在第三方應用程序、框架的已提供的配置文件的基礎上,進行修改即可~(要改成什么樣子,取決于我們的具體需求,而怎么改,則取決于 XML 基本語法,和具體的 XML 約束)

目錄

常見的配置文件的類型

DOM4J 進行 XML 解析

完!


常見的配置文件的類型

1. properties:例如 druid 連接池就是使用其作為配置文件的。

語法規范:

? ? ? ? 1. 由鍵值對組成

? ? ? ? 2. 鍵和值之間的符號的等號

? ? ? ? 3. 每一行都必須頂格寫,前面不能由空格之類的其他符號

示例:

補充:由于我們為了文件分類清晰,創建了一個 resources 文件夾,存放 jdbc.properties 文件,但我們的 properties 此時就無法與 src 產生關系。這樣就相當于把 properties 文件放進了 src 啦~

由于我們編寫的代碼會有不同的環境,所以也需要不同的配置。比如:1. 在我們程序員自己的電腦。2. 在公司的測試服務器。3. 正式的商用服務器

這樣就會顯得非常雜亂,層次不清晰

這時候就需要我們的 XML 了

2. XML:例如 Tomcat 就是使用 XML 文件作為配置文件

語法規范:

? ? ? ? 1. XML 的基本語法和 HTML 的基本語法如出一轍。XML 語法 + HTML 約束 = HTML 語法。在邏輯上,HTML 屬于是 XML 的子集。

? ? ? ? 2. XML 文檔聲明:這部分基本上就是固定格式:<?xml version="1.0" encoding="UTF-8"?>;

? ? ? ? 3. 根標簽:根標簽有且只能有一個

? ? ? ? 4. 標簽關閉:開始標簽和結束標簽都必須成對出現,單標簽在標簽內關閉

? ? ? ? 5. 標簽嵌套:標簽可以嵌套,但是不能交叉嵌套

? ? ? ? 6. 屬性:屬性必須有值,屬性值必須加引號,單雙都可~

兩相對比,XML 更有層次,清晰一些~

xml 也是有約束的:約束用于限定 XML 內部能編寫的內容,在編寫 XML 的時候,編輯工具會根據約束來進行提示。XML 約束主要包括 DTD(簡單,上手快,約束沒有 Schema 細致) 和 Schema(復雜,上手慢,約束要比 DTD 更加細致) 兩種。

但 XML 約束并不需要我們自己寫,可以 idea 直接生成~

?

這就是 idea 自動為我們生成的 xml 限制,看倒數第二行的一長串的地址末尾,為 .xsd 就表明的 Schema 限制~ 如果是 .dtd 就是 DTD 限制

加了限制之后,我們就無法再隨意填寫標簽了~

3. YAML/YML:例如 SpingBoot 就是使用 YAML 作為配置文件

4. JSON:通常用來做文件傳輸,也可以用來做前端或者移動端的配置文件

DOM4J 進行 XML 解析

? ? ? ? 1. 導入 jar 包 dom4.jar

? ? ? ? 2. 創建解析對象(SAXReader)

? ? ? ? 3. 解析 XML 獲得 Document 對象

? ? ? ? 4. 獲取根節點 RootElement

? ? ? ? 5. 獲取根節點下的字節點

我們首先要導入?jar 包(下載 jar 包的流程我在前面文章有提到:jar 包如何下載-CSDN博客)

然后,我們就可以在 src 中創建類,來secessionist DOM4J 對 XML 進行解析~

package test;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.testng.annotations.Test;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;@Test
public class TestDOM4j_demo {public void testRead() throws FileNotFoundException, DocumentException {// 讀取 jdbc.xml 配置文件,獲得 document 對象SAXReader saxReader = new SAXReader();// 1. 直接獲得 document 對象// 這種方法需要確定 xml 文件的路徑,可以用第二種反射的方法//saxReader.read(new FileInputStream("E:\\java_new\\java_code\\xml-demo\\resources\\jdbc.xml"));// 2. 通過類加載器來獲得指向字節碼根路徑下的指定文件的輸入流InputStream resourceAsStream = TestDOM4j_demo.class.getClassLoader().getResourceAsStream("jdbc.xml");// 其實真正實際操作的時候,很少我們直接讀取 xml 文件,框架種都會自帶~// 通過輸入流獲得配置文件,解析成一個 dom 對象Document document = saxReader.read(resourceAsStream);// 從 document 對象上獲取配置文件種的信息/*document 樹:Node 節點Element 元素節點Attribute 屬性節點Test 文本節點*/Element rootElement = document.getRootElement();System.out.println(rootElement.getName());// 獲取元素下的子元素List<Element> elements = rootElement.elements();for (Element element : elements) {System.out.println("\t" + element.getName());// 從元素上獲取屬性Attribute idAttribute = element.attribute("id");System.out.println("\t\t" + idAttribute.getName() + "=" + idAttribute.getValue());// 繼續讀取子元素List<Element> eles = element.elements();for (Element ele : eles) {System.out.println("\t\t" + ele.getName() + ":" + ele.getText());}}}
}

完!

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

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

相關文章

qml實現 裁剪進度條

我們需要實現一個垂直進度條效果&#xff0c;但使用圖片裁剪的方式。具體需求&#xff1a; 1. 圖片位置固定&#xff0c;容器對齊其左邊和下邊&#xff0c;寬度和圖片相同。 2. 容器背景透明&#xff0c;調整裁剪容器的高度&#xff0c;使其有高度進度條的感覺&#xff08;從下…

Dify 工作流全棧解析:從零構建你的 AI 應用流程引擎

AI工作流的導言&#xff1a; 工作流系統&#xff08;Workflow System&#xff09;是 Dify 的核心組成部分&#xff0c;它通過可視化編程界面支持創建復雜的 AI 應用程序。用戶可以將不同的功能塊連接起來&#xff0c;從而設計出用于處理數據、與 AI 模型交互、管理條件以及執行…

上下位機通訊規則

0&#xff1a;事由 最近開發&#xff0c;上位機Qt與下位機通訊的時候發現通訊規則有些不一樣&#xff0c;這里簡單記錄一下 。所有代碼基于元寶生成&#xff0c;屬于偽代碼不保證真實可用&#xff0c;啊但是邏輯是這么個邏輯。 1&#xff1a;底層通訊規則 以STM32向上位機通訊…

創建平衡二叉樹C++

給你一個整數數組 nums &#xff0c;其中元素已經按 升序 排列&#xff0c;請你將其轉換為一棵 平衡 二叉搜索樹。 平衡二叉樹&#xff1a;每個節點的左右子樹高度差不超過1 class Solution { public:TreeNode* dfs(vector<int>& nums, int left, int right){if(l…

海光の初體驗

背景 八張K100的風扇已經將近一年沒轉過了…早在今年4月29日&#xff0c;Qwen3正式發布并全部開源8款「混合推理模型」。作為Qwen系列中的最新一代大型語言模型&#xff0c;Qwen3在推理、指令遵循、工具調用、多語言能力等方面進行了全面增強。海光DCU&#xff08;Deep Comput…

場外交易(OTC)財富管理系統開發及解決方案報告

——跨境金融科技賦能機構客戶新增長 一、OTC市場現狀與機構業務痛點 1. 政策機遇與市場擴容 “北向互換通”期限延長&#xff1a;2025年7月1日&#xff0c;中國外匯交易中心聯合香港交易所將利率互換合約期限延長至30年&#xff0c;首日交易規模達15.3億元&#xff0c;填補超…

pytorch底層原理學習--JIT與torchscript

文章目錄 0 目的1 TorchScript1.1 語言特性的限定性1.2 設計目的&#xff1a;模型表達的專注性 2pytorch JIT&#xff08;Just-in-time compilation)2.1pytorch JIT定義2.1pytorch JIT整個過程&#xff1a;1. 前端轉換層&#xff1a;生成靜態計算圖2. 中間表示層&#xff08;IR…

Ubuntu+Nginx+php+SQLite3+typecho手動搭建個人博客

零.Ubuntu環境 一.安裝nginx 使用以下指令進行nginx web服務器安裝&#xff1a; apt-get install nginx 如果提示找不到安裝包&#xff0c;也可以更新一下系統的apt環境包&#xff1a; sudo apt update 安裝完成后&#xff0c;可以使用以下指令查看nginx是否處于激活狀態&#…

網絡協議概念與應用層

1.概念 1.1 例子 點外賣 上述這個過程,就是自定義協議 自定義協議,具體的方式也是非常靈活的 2.幾種開發中更常見的格式 2.1xml 上古時期的組織數據的格式 通過標簽來組織數據 xml的優勢:讓數據的可讀性變得更好了 劣勢:標簽寫起來繁瑣,傳輸的時候也占用更多網絡帶寬 2.2…

pytorch學習—7.處理多維特征的輸入

2. 線性模型 3.梯度下降算法 4.反向傳播(用pytorch算梯度) 5.用pytorch實現線性回歸 6.logistic回歸 7.處理多維特征的輸入_嗶哩嗶哩_bilibili 7.1代碼復現: import numpy as np import torch import matplotlib.pyplot as plt# 1. 獲取數據集 xy_data = np.lo

AI助手“智普清言”《三元》(Python)詩解

文本邏輯解清晰&#xff0c;詩意對應技法輕。 筆記模板由python腳本于2025-07-01 06:54:55創建&#xff0c;本篇筆記適合喜歡python三元語句的coder翻閱。 學習的細節是歡悅的歷程 博客的核心價值&#xff1a;在于輸出思考與經驗&#xff0c;而不僅僅是知識的簡單復述。 Pytho…

本地RAG實戰:用Spring AI+Ollama+DeepSeek+ChromaDB增強文檔問答

本文手把手教你在本地部署RAG系統&#xff1a; 用 Spring AI 整合 Ollama&#xff08;運行DeepSeek中文模型&#xff09;ChromaDB 存儲本地文檔&#xff08;PDF/TXT&#xff09;向量Java程序實現&#xff1a;文檔解析 → 語義檢索 → 增強生成 最終效果&#xff1a;模型回答更準…

Python 數據分析:DataFrame,生成,用字典創建 DataFrame ,鍵值對數量不一樣怎么辦?

目錄 1 示例代碼2 歡迎糾錯3 論文寫作/Python 學習智能體------以下關于 Markdown 編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右S…

Java 并發編程的 CAS(Compare and Swap)是什么?

CAS&#xff08;Compare and Swap&#xff0c;比較并交換&#xff09; 并非 Java 語言特有的概念&#xff0c;而是現代計算機硬件提供的一條核心原子指令。在 Java 并發編程中&#xff0c;它扮演著“幕后英雄”的角色&#xff0c;是構建高性能、無鎖并發工具&#xff08;如原子…

【UnityAssetBundle】AssetBundle打包

AssetBundle生成AB包資源文件方式&#xff1a; Unity編輯器開發&#xff0c;自定義打包工具&#xff1b;官方提供好的打包工具&#xff0c;Asset Bundle Browser 打包 選擇一個資源&#xff0c;new一個壓縮包名稱或選擇一個壓縮包名稱 點擊Window->AssetBundle Browser&…

Hush Puppies大中華區鞋類業務移交品牌方繼續經營

據悉&#xff0c;隨著百麗集團運營的暇步士&#xff08;Hush Puppies&#xff09;大中華區鞋類授權的到期&#xff0c;暇步士&#xff08;Hush Puppies&#xff09;鞋類業務已開始運營權移交。其中線上渠道授權于2025年6月30日正式到期&#xff0c;線下渠道將于2025年12月31日前…

解釋LLM怎么預測下一個詞語的

解釋LLM怎么預測下一個詞語的 通過上文詞的向量進行映射 在Transformer架構的大語言模型(如GPT系列、BERT等)中,詞語會先被轉化為詞向量。在預測下一個詞時,模型會基于之前所有詞的向量表示(并非僅僅上一個詞,但上一個詞的向量是重要信息來源之一)進行計算。 以GPT-2…

DAY 49 CBAM注意力

目錄 DAY 49 CBAM注意力1.通道注意力模塊復習2.空間注意力模塊3.CBAM的定義作業&#xff1a;嘗試對今天的模型檢查參數數目&#xff0c;并用tensorboard查看訓練過程 DAY 49 CBAM注意力 1.通道注意力模塊復習 2.空間注意力模塊 3.CBAM的定義 import torch import torch.nn …

【網絡】Linux 內核優化實戰 - net.ipv4.conf.all.rp_filter

目錄 net.ipv4.conf.all.rp_filter 參數詳解一、參數基本概念二、參數取值及含義三、反向路徑過濾的工作原理四、配置示例與注意事項五、與其他參數的關聯六、總結 net.ipv4.conf.all.rp_filter 參數詳解 一、參數基本概念 net.ipv4.conf.all.rp_filter 是 Linux 內核中用于控…

ElementUI el-select多選下拉框,回顯數據后無法重新選擇和修改

問題 ElementUI el-select多選下拉框&#xff0c;回顯數據后無法重新選擇和修改&#xff0c;點擊選擇和刪除都沒有反應&#xff0c;頁面也沒有報錯 方案一 網上搜出來的基本上都是這個解決辦法&#xff0c;但是我設置后沒有生效&#xff0c;還是無法選擇和修改 原因 下拉框數…