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());}}}
}