XML 可擴展標記語言(Extensive Markup Language),標簽中的元素名是可以自己隨意寫,可拓展是相對於html來說 標記語言:由一對尖括弧括起來<內容>,就稱為標記,標簽;代碼都是由標簽組成,就稱為標記語言 作用 用來當做配置文件 xml的配置文件和properties的配置文 ...
XML
可擴展標記語言(Extensive Markup Language),標簽中的元素名是可以自己隨意寫,可拓展是相對於html來說
標記語言:由一對尖括弧括起來<內容>,就稱為標記,標簽;代碼都是由標簽組成,就稱為標記語言
作用
- 用來當做配置文件
- xml的配置文件和properties的配置文件的選用:
- 如果配置的是單項數據,使用properties
- 如果配置的是多項數據,使用xml
語法
文件尾碼
.xml
文檔聲明
version 是版本的意思, encoding 是編碼集
<?xml version='1.0' encoding='utf-8'?>
註釋
<!-- 註釋 -->
標簽
1、xml文件中有且只有一個根標簽
2、標簽中可以定義屬性,在給屬性賦值的時候,值要用引號括起來(單雙都可)
3、標簽名區分大小寫
4、標簽的閉合
<aaa></aaa>
有頭有尾<bbb/>
自閉和
5、標簽名的命名規則
- 可以由數字,字母,一些符號來組成
- 開頭不能是數字和標點符號
- 標簽名中不能有空格
- 如:
<aa a></aa a>
- 如:
- 標簽名不能是xml或者XML
- 如:
<xml></xml>
- 如:
XML約束
DTD約束
文檔類型定義
內部引入
<!DOCTYPE books[
<!ELEMENT books (book+)>
<!ELEMENT book (name,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<books>
<book>
<name>三國</name>
<price>386</price>
</book>
<book>
<name>水滸</name>
<price>400</price>
</book>
</books>
外部引入(本地)
dtd文件:books.dtd
<!ELEMENT books (book+)>
<!ELEMENT book (name,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
引入
<!DOCTYPE books SYSTEM "books.dtd">
外部引入(網路)
<!DOCTYPE books PUBLIC "DTD名稱" "DTD文檔的URL">
XML解析
DOM解析
就是指先將xml文件一次性的載入進記憶體中,在記憶體中形成一個樹狀結構(dom樹)
優點:我們可以通過dom方式的解析,對xml文件中的數據進行增刪改查
缺點:如果樹太大了,非常占記憶體空間
SAX解析
Simple APIs for XML(簡單應用程式介面)
基於事件處理的,逐行掃描,逐行載入。
優點:逐行掃描,讀取一行,載入一行,載入完就扔了,不占用記憶體空間
缺點:執行過程不可逆,不能對數據進行增刪改操作,只能進行查詢操作,不能回頭了
JDOM解析
DOM4j解析
public static void main(String[] args) throws DocumentException {
SAXReader saxReader = new SAXReader();
//解析XML文件、獲取樹對象
Document doc = saxReader.read(new File("java20210519/src/study/books.xml"));
//獲取根標簽對象
Element root = doc.getRootElement();
//獲取根元素下的子元素對象集合
List<Element> list = root.elements();
for (Element element : list){
//獲取該元素下的子元素name
Element name = element.element("name");
//獲取該元素下的子元素price
Element price = element.element("price");
//獲取name、price元素的文本信息
System.out.println("名稱:" + name.getText() + ",價格:" + price.getText());
}
}
常用API
Element對象
// 獲取所有的子標簽
List<Element> elements();
// 獲取元素的名字
String getName();
// 獲取標簽內的文本內容
String getText();
// 根據標簽名獲取指定第一個標簽對象
Element element(String name);
// 根據屬性名獲取屬性值
String attributeValue(String name);