XML簡要介紹

實際上現在的Java Web項目中更多的是基于springboot開發的,所以很少再使用xml去配置項目。所以我們的目的就是盡可能快速的去了解如何讀懂和使用xml文件,對于DTD,XMLSchema這類約束的學習可以放松,主要是確保自己知道這里面的大致使用方式,約定方式,不太需要過于深入細節。尤其是當ai快速發展,首要的是能夠看懂,知道作用和地位。

約束

下面我們已pom.xml文件為例

上述使用的就是Schema的方式作為當前xml文件的約束。(約束實際上就是體現了現代編程中約定大于配置的思想)
下面是傳統的DTD的約束方式對xml文件約束

上述是使用mybits定義的約束來對于當前mapper.xml文件進行約束。在實際項目中也可以自定義一定的DTD約束,使用STYSTEM在XML文件中引入約束,當然也可以使用嵌入的方式實現DTD約束。

由于向我上面說的,很少使用自己的XML文件,最多是對于當前項目中需要的內容進行配置,然而這些配置的內容更多的都是一些已有的約束,所以首要的是能夠看懂約束。
DTD約束的語法規則很簡單,最多的就是一些元素,屬性,元素類型,屬性類型,分清楚記住就可以。

xml文件使用場景

在后端開發項目中,XML 文件就像一個 “信息寶庫”,被廣泛應用于各種場景,下面給你介紹常見的使用場景:

1. 配置文件

  • 框架配置:許多后端框架,如 Spring、Struts 等,都使用 XML 文件來進行配置。以 Spring 框架為例,在 Spring 的 XML 配置文件中,可以定義 Bean(即應用中的組件),聲明它們之間的依賴關系 。比如,你要配置一個?UserService?的 Bean,可以這樣寫:

xml

<bean id="userService" class="com.example.service.UserService"><property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.dao.UserDao"/>

這里通過 XML 文件明確了?UserService?依賴于?UserDao,并將它們作為 Bean 納入 Spring 的管理。這樣的配置方式使得項目結構更加清晰,并且在不修改代碼的情況下,能夠方便地調整 Bean 的屬性和依賴關系。

  • 數據庫連接配置:XML 文件也常用于配置數據庫連接參數。在 Java 項目中,可能會有一個?database.xml?文件,在其中定義數據庫的 URL、用戶名、密碼等信息。例如:
<database><url>jdbc:mysql://localhost:3306/mydb</url><username>root</username><password>password</password>
</database>

應用程序在啟動時讀取這個 XML 文件,獲取數據庫連接信息,從而連接到數據庫。這樣做的好處是,如果數據庫相關信息發生變化,只需修改 XML 文件,而無需在代碼中到處查找和修改硬編碼的數據庫連接字符串。

2. 數據存儲與傳輸

  • 數據持久化:XML 可以用來存儲數據,特別是對于一些簡單的結構化數據。例如,一個小型的博客系統可能會用 XML 文件來存儲文章信息。每篇文章可以表示為一個 XML 元素,文章的標題、作者、內容等作為子元素。
<article><title>后端開發的魅力</title><author>張三</author><content>后端開發是構建應用程序的重要部分...</content>
</article>

這樣的 XML 文件便于數據的存儲和后續的讀取與解析。

  • 數據交換:在不同系統之間進行數據傳輸時,XML 是一種常用的格式。比如,一個電商系統與物流系統進行對接,電商系統將訂單信息以 XML 格式發送給物流系統。訂單的基本信息、商品列表等都可以清晰地在 XML 結構中體現。物流系統接收到 XML 數據后,按照約定的格式進行解析,獲取所需信息。這種方式的優勢在于 XML 具有良好的可讀性和跨平臺性,不同語言開發的系統都能夠方便地處理 XML 數據。

3. Web 服務相關

  • Web 服務描述:在 SOAP(Simple Object Access Protocol) Web 服務中,使用 WSDL(Web Services Description Language)文件來描述 Web 服務的接口、操作、輸入輸出參數等信息,而 WSDL 文件本質上就是一種 XML 文件。例如,一個提供天氣查詢的 Web 服務,其 WSDL 文件會詳細描述查詢天氣的方法(如傳入城市名稱,返回天氣信息)以及相關的數據類型等,客戶端可以根據這個 WSDL 文件生成調用該 Web 服務的代碼。
  • JAX - WS 配置:在 Java 的 JAX - WS(Java API for XML - based Web Services)開發中,也會用到 XML 文件進行配置。例如,可以通過 XML 文件來配置 Web 服務的端點地址、綁定協議等信息,使得 Web 服務的部署和配置更加靈活。

4. 文檔表示

  • 文檔結構化:XML 可以用于創建結構化的文檔,例如電子書、技術規范文檔等。以電子書為例,可以用 XML 來標記章節、段落、標題、圖片等元素,實現文檔的結構化存儲和展示。這樣不僅便于文檔的管理和編輯,還能通過不同的樣式表(如 XSLT)將 XML 文檔轉換為不同格式(如 HTML、PDF)進行展示。
  • 元數據描述:項目中的一些元數據,如關于項目的描述、作者信息、版本歷史等,可以用 XML 文件來記錄。這些元數據對于項目的管理、維護以及其他開發者了解項目背景都非常有幫助。

學習 XML 相關知識,可以參考 W3School 的 XML 教程,它提供了從基礎語法到實際應用的詳細講解。在實踐項目方面,可以嘗試開發一個簡單的配置管理系統,使用 XML 文件來存儲配置信息,并編寫代碼讀取和修改這些配置,以此加深對 XML 在項目中應用

xml的可替代方案

在現代項目中,XML 文件的使用頻率確實有所下降,主要有以下幾個原因:

XML 使用頻率下降的原因

  1. 語法繁瑣:XML 的語法相對復雜,標簽眾多,需要嚴格遵循開閉標簽的規則,書寫和閱讀成本較高。例如,一個簡單的鍵值對配置,如果用 XML 表示:
<configuration><property><name>server.port</name><value>8080</value></property>
</configuration>

相比之下,同樣的內容使用更簡潔的格式(如 JSON 或 YAML)會清晰很多。
2.?數據解析性能:XML 解析時,無論是采用 DOM(Document Object Model)方式將整個文檔加載到內存構建樹形結構,還是 SAX(Simple API for XML)基于事件驅動的解析方式,在性能上都不如一些輕量級的數據格式。特別是在處理大數據量時,DOM 方式可能會導致內存占用過高,而 SAX 雖然內存占用低,但編程復雜度較高。
3.?與編程語言的集成度:對于一些動態類型語言或者強調簡潔開發的語言和框架,XML 的使用不夠便捷。例如在 Python 的一些 Web 開發框架中,開發者更傾向于使用簡單易讀的配置方式,XML 的復雜結構與這些語言的開發風格不太契合。

替代 XML 的常用技術

  1. JSON(JavaScript Object Notation)
    • 特點:JSON 是一種輕量級的數據交換格式,易于閱讀和編寫,同時也易于機器解析和生成。它基于 JavaScript 的對象字面量表示法,具有良好的跨語言特性。例如,上述配置用 JSON 表示為:
{"server.port": 8080
}
  • 應用場景:在 Web 應用的前后端數據交互中廣泛使用。前端 JavaScript 可以很方便地將 JSON 數據解析為對象進行處理,后端各種編程語言也都有豐富的庫來處理 JSON 數據。例如在基于 Spring Boot 的后端項目與 Vue.js 前端項目進行數據交互時,JSON 是默認的數據傳輸格式。在微服務架構中,服務之間的數據通信也常使用 JSON。
  1. YAML(YAML Ain't Markup Language)
    • 特點:以簡潔的語法和強大的表現力著稱,采用縮進表示層級關系,可讀性非常好。例如,同樣的配置用 YAML 表示:
server:port: 8080
  • 應用場景:在容器編排工具如 Docker Compose 和 Kubernetes 中,YAML 用于定義容器化應用的配置和部署信息。在一些配置管理工具(如 Ansible)中,YAML 也用于編寫配置文件,定義自動化任務和配置參數等。同時,在一些云原生應用開發中,YAML 被廣泛用于描述應用的各種配置和元數據。

  1. Properties 文件
    • 特點:是一種簡單的鍵值對配置文件格式,主要用于 Java 項目的配置。它的語法非常簡單,每一行是一個鍵值對,以等號 “=” 分隔。例如:
server.port=8080
  • 應用場景:在 Java 的一些小型項目或者作為 Java 應用中特定模塊的配置文件,Properties 文件使用方便,適合配置一些簡單的參數。例如在 Java 的日志框架(如 Log4j)中,可以使用 Properties 文件來配置日志級別、輸出路徑等信息。

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

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

相關文章

UI自動化測試中,一個完整的斷言應所需要考慮的問題

在UI自動化測試中,一個完整的斷言應全面覆蓋用戶界面(UI)的功能性、交互性和視覺正確性。以下是斷言需要包含的核心內容及詳細說明: 一、基礎元素驗證 存在性斷言 驗證元素存在于DOM中示例代碼(Python + Selenium):assert driver.find_element(By.ID, "submit_btn&…

[Java][Leetcode middle] 238. 除自身以外數組的乘積

第一個想法是&#xff1a; 想求出所有元素乘積&#xff0c;然后除以i對應的元素本書&#xff1b;這個想法是完全錯誤的&#xff1a; nums[I] 可能有0題目要求了不能用除法 第二個想法是&#xff1a; 其實寫之前就知道會超時&#xff0c;但是我什么都做不到啊&#xff01; 雙…

5.16本日總結

一、英語 背誦list30&#xff0c;復習list1 二、數學 學習14講部分內容&#xff0c;訂正30講13講題目 三、408 學習計網5.3知識點&#xff0c;完成5.1&#xff0c;5.2題目并訂正 四、總結 高數對于基本定義概念類題目掌握不好&#xff0c;做題時往往不會下手&#xff0c…

深度學習---常用優化器

優化器一&#xff1a;Adam&#xff08;Adaptive Moment Estimation&#xff09; 一、適用場景總結&#xff08;實踐導向&#xff09; 場景是否推薦用 Adam說明小模型訓練&#xff08;如 MLP、CNN&#xff09;???穩定、無需復雜調參&#xff0c;適合快速實驗初學者使用或結構…

SparkSQL 連接 MySQL 并添加新數據:實戰指南

SparkSQL 連接 MySQL 并添加新數據&#xff1a;實戰指南 在大數據處理中&#xff0c;SparkSQL 作為 Apache Spark 的重要組件&#xff0c;能夠方便地與外部數據源進行交互。MySQL 作為廣泛使用的關系型數據庫&#xff0c;與 SparkSQL 的結合可以充分發揮兩者的優勢。本文將詳細…

基于對抗性后訓練的快速文本到音頻生成:stable-audio-open-small 模型論文速讀

Fast Text-to-Audio Generation with Adversarial Post-Training 論文解析 一、引言與背景 文本到音頻系統的局限性&#xff1a;當前文本到音頻生成系統性能雖佳&#xff0c;但推理速度慢&#xff08;需數秒至數分鐘&#xff09;&#xff0c;限制了其在創意領域的應用。 研究…

AI畫圖Stable Diffusion web UI學習筆記(中)

本文記錄講解AI畫圖工具Stable Diffusion web UI的部分基本使用方法&#xff0c;以便進行學習。AI畫圖Stable Diffusion web UI學習筆記分為上、中、下三篇文章。 我在 AI畫圖Stable Diffusion web UI學習筆記&#xff08;上&#xff09;_webui-CSDN博客 這篇文章中介紹了Stabl…

安全與智能的雙向奔赴,安恒信息先行一步

人類文明發展的長河中&#xff0c;每一次技術變革都重新書寫了安全的定義。 從蒸汽機的轟鳴到電力的普及&#xff0c;從互聯網的誕生到人工智能的崛起&#xff0c;技術創新與變革從未停止對于安全的挑戰。今天&#xff0c;我們又站在一個關鍵的歷史節點&#xff1a;AI大模型的…

【Reality Capture 】02:Reality Capture1.5中文版軟件設置與介紹

文章目錄 一、如何設置中文二、如何設置界面分區三、如何切換二三維窗口四、工具欄有多個視圖選項卡RealityCapture是虛幻引擎旗下一款三維建模軟件,跟我們常用的三維建模軟件一樣,可以從圖像或激光掃描中創建實景三維模型和正射影像等產品。可用于建筑、測繪、游戲和視覺特效…

真題卷001——算法備賽

藍橋杯2024年C/CB組國賽卷 1.合法密碼 問題描述 小藍正在開發自己的OJ網站。他要求用戶的密碼必須符合一下條件&#xff1a; 長度大于等于8小于等于16必須包含至少一個數字字符和至少一個符號字符 請計算一下字符串&#xff0c;有多少個子串可以當作合法密碼。字符串為&am…

17.three官方示例+編輯器+AI快速學習webgl_buffergeometry_lines

本實例主要講解內容 這個Three.js示例展示了如何使用BufferGeometry創建大量線段&#xff0c;并通過**變形目標(Morph Targets)**實現動態變形效果。通過隨機生成的點云數據&#xff0c;結合頂點顏色和變形動畫&#xff0c;創建出一個視覺效果豐富的3D線條場景。 核心技術包括…

InfluxDB 2.7 連續查詢實戰指南:Task 替代方案詳解

InfluxDB 2.7 引入了 Task 功能&#xff0c;作為連續查詢&#xff08;CQ&#xff09;的現代替代方案。本文詳細介紹了如何使用 Task 實現傳統 CQ 的功能&#xff0c;包括語法解析、示例代碼、參數對比以及典型應用場景。通過實際案例和最佳實踐&#xff0c;幫助開發者高效遷移并…

Pytorch張量和損失函數

文章目錄 張量張量類型張量例子使用概率分布創建張量正態分布創建張量 (torch.normal)正態分布創建張量示例標準正態分布創建張量標準正態分布創建張量示例均勻分布創建張量均勻分布創建張量示例 激活函數常見激活函數 損失函數(Pytorch API)L1范數損失函數均方誤差損失函數交叉…

大模型在數據分析領域的研究綜述

大模型在業務指標拆解中的應用場景與方法研究 隨著人工智能技術的快速發展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;在數據分析領域的應用日益廣泛。尤其是在業務指標拆解這一復雜任務中&#xff0c;大模型展現了其獨特的價值和潛力。通過對多維…

JAVA:ResponseBodyEmitter 實現異步流式推送的技術指南

1、簡述 在許多場景下,我們希望后端能夠以流式、實時的方式推送數據給前端,比如消息通知、日志實時展示、進度條更新等。Spring Boot 提供了 ResponseBodyEmitter 機制,可以讓我們在 Controller 中異步地推送數據,從而實現實時流式輸出。 樣例代碼:https://gitee.com/lh…

Spring Boot循環依賴的陷阱與解決方案:如何打破“Bean創建死循環”?

引言 在Spring Boot開發中&#xff0c;你是否遇到過這樣的錯誤信息&#xff1f; The dependencies of some of the beans in the application context form a cycle 這表示你的應用出現了循環依賴。盡管Spring框架通過巧妙的機制解決了部分循環依賴問題&#xff0c;但在實際開…

如何閱讀、學習 Tcc (Tiny C Compiler) 源代碼?如何解析 Tcc 源代碼?

閱讀和解析 TCC&#xff08;Tiny C Compiler&#xff09; 的源代碼需要對編譯器的基本工作原理和代碼結構有一定的了解。以下是分步驟的指南&#xff0c;幫助你更高效地學習和理解 TCC 的源代碼&#xff1a; 1. 前置知識準備 C 語言基礎&#xff1a;TCC 是用 C 語言編寫的&…

Java Set系列集合詳解:HashSet、LinkedHashSet、TreeSet底層原理與使用場景

Java Set系列集合詳解&#xff1a;HashSet、LinkedHashSet、TreeSet底層原理與使用場景 一、Set系列集合概述 1. 核心特點 無序性&#xff1a;存取順序不一致&#xff08;LinkedHashSet除外&#xff09;。唯一性&#xff1a;元素不重復。無索引&#xff1a;無法通過索引直接訪…

解決 CentOS 7 鏡像源無法訪問的問題

在國內使用 CentOS 系統時&#xff0c;經常會遇到鏡像源無法訪問或者下載速度慢的問題。尤其是默認的 CentOS 鏡像源通常是國外的&#xff0c;如果你的網絡環境無法直接訪問國外服務器&#xff0c;就會出現無法下載包的情況。本文將介紹如何修改 CentOS 7 的鏡像源為國內鏡像源…

云計算與大數據進階 | 26、解鎖云架構核心:深度解析可擴展數據庫的5大策略與挑戰(上)

在云應用/服務的 5 層架構里&#xff0c;數據庫服務層穩坐第 4 把交椅&#xff0c;堪稱其中的 “硬核擔當”。它的復雜程度常常讓人望而生畏&#xff0c;不少人都將它視為整個架構中的 “終極挑戰”。 不過&#xff0c;也有人覺得可擴展存儲系統才是最難啃的 “硬骨頭”&#…