一、XML簡介 1. 什麼是xml? xml 是可擴展的標記性語言 2. xml的作用? 用來保存數據,而且這些數據具有自我描述性 它還可以做為項目或者模塊的配置文件 還可以做為網路傳輸數據的格式(現在 JSON 為主) 二、XML語法 首先創建一個xml文件 <?xml version="1.0" ...
一、XML簡介
1. 什麼是xml?
xml 是可擴展的標記性語言
2. xml的作用?
- 用來保存數據,而且這些數據具有自我描述性
- 它還可以做為項目或者模塊的配置文件
- 還可以做為網路傳輸數據的格式(現在 JSON 為主)
二、XML語法
首先創建一個xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!--
文件的聲明
version="1.0" 表示xml的版本
encoding="UTF-8" 表示xml文件本身的編碼
-->
圖書有 標識,書名,有作者,價格的信息
<?xml version="1.0" encoding="UTF-8" ?>
<!--
文件的聲明
version="1.0" 表示xml的版本
encoding="UTF-8" 表示xml文件本身的編碼
-->
<!-- 多個圖書信息-->
<books>
<!--一個圖書的基本信息-->
<book sn="SN123454321"> <!--屬性值-->
<name>雍正王朝</name>
<author>二月河</author>
<price>99</price>
</book>
<book sn="SN987654321">
<name>康熙大帝</name>
<author>二月河</author>
<price>99</price>
</book>
</books>
- 註釋和html一樣
- 其他的基本上看看就懂了
註意:
- XML 文檔必須有根元素,並且是唯一的,就如上面的books一樣,
三、XML解析
這裡主要就使用dom4j技術來解析
首先需要到官網找到這個jar包,直接複製到當前的模塊下即可
1. Dom4j編程步驟
- 先載入 xml 文件創建 Document 對象
- 通過 Document 對象拿到根元素對象
- 通過根元素.elelemts(標簽名); 可以返回一個集合,這個集合里放著。所有你指定的標簽名的元素對象
- 找到你想要修改、刪除的子元素,進行相應在的操作
- 保存到硬碟上或者其他地方
2. 獲取document對象
1. 首先創建一個lib包,直接把網上找到的dom4j的jar包複製到lib下,然後
2. 寫一個需要解析的books.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book sn="SN123454321">
<name>雍正王朝</name>
<author>二月河</author>
<price>99</price>
</book>
<book sn="SN987654321">
<name>康熙大帝</name>
<author>二月河</author>
<price>99</price>
</book>
</books>
3. 獲取Document對象的代碼
@Test
public void test1() throws DocumentException {
// 1. 先創建一個SAXReader對象
SAXReader saxReader = new SAXReader();
// 2. 這個對象用來讀取xml文件,返回一個document
Document read = saxReader.read("src/books.xml");
// 3. 列印到控制台,查看是否成功
System.out.println(read);
}
3. 遍歷標簽獲取內容
需要分四步操作:
- 通過創建 SAXReader 對象。來讀取 xml 文件,獲取 Document 對象
- 通過 Document 對象。拿到 XML 的根元素對象
- 通過根元素對象。獲取所有的 book 標簽對象
- 遍歷每個 book 標簽對象。然後獲取到 book 標簽對象內的每一個元素,再通過 getText() 方法拿到起始標簽和結 束標簽之間的文本內容
首先寫一個Book類,用於存放數據
package com.md.java;
/**
* @author MD
* @create 2020-07-24 8:45
*/
public class Book {
private String sn;
private String name;
private String author;
private Double price;
public Book() {
}
public Book(String sn, String name, String author, Double price) {
this.sn = sn;
this.name = name;
this.author = author;
this.price = price;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
'}';
}
}
讀取xml文件中的內容,xml文件就是上面的books.xml
/**
* 讀取books.xml文件生成的Book類
*/
@Test
public void test2() throws DocumentException {
// 1. 讀取文件,在Junit測試中,相對路徑是從模塊名開始的
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml");
// 2. 通過Document對象獲取根元素
Element rootElement = document.getRootElement();
//System.out.println(rootElement);
// 3. 通過根元素讀取book標簽對象
// element()和elements()都是通過標簽名查找子元素
List<Element> books = rootElement.elements("book");
// 4. 遍歷處理book標簽轉換為Book類
for (Element book:books){
// asXML()把標簽對象轉換為標簽字元串
// System.out.println(book.asXML());
// 5. 獲取到了這個標簽
Element nameElement = book.element("name");
// 獲取這個標簽的文本內容
String name = nameElement.getText();
// 或者可以直接獲取標簽里的文本內容
String price = book.elementText("price");
String author = book.elementText("author");
// 獲取屬性值
String sn = book.attributeValue("sn");
// 獲取完成之後就可以生成了,註意價格是double類型的
System.out.println(new Book(sn,name,author,Double.parseDouble(price)));
}
}