xml檔案
xml檔案中的儲存資料黨需要被程式傳輸並使用的時候,因為xml語法是有別於其它語言的語法的,因此我們需要根據別的語言規則來將xml檔案進行解析,我們把這個過程稱之為xml資料的解析
xml檔案的優點:xml相對於各種語言,它的定義都是一致的,解析的邏輯也是一致的,因此常常被用來進行各個語言之間的資料傳遞
xml檔案的解析方式主要有三種:1.dom解析 2.sax解析 3.dom4j解析
dom解析:dom解析是將xml檔案全部載入到記憶體中,以結構樹的物件模型來明確各個節點之間的聯絡和層次關係,方便我們對各個節點之間進行操作,具有很強的節點操作能力,但是dom解析的缺點也是顯而易見的,會占用較大的記憶體,因此解析的速度會比較慢,會給記憶體造成比較大的壓力
sax解析:sax解析是將xml檔案中的資料以介面的形式存放到記憶體中,然後根據要求,進行解析資料;因此,sax解析的優點是能夠快速解析資料,而且操作比較靈活.但是缺點就是無法標註各個節點之間的層次關係,獲取操作功能單一性
dom4j:則整合了dom解析和sax解析的特點,將xml檔案的各個節點之間的關係通過介面來存放在記憶體中,然後根據要求進行解析,解析相對來說是比較快的
下面我們來解析乙個簡單的xml檔案和學習一下dom4j的一些簡單的api
《學校
name = "清華學校">
清華學校
]]>
《老師們
name = "老師">
id = "10000">
王大錘name>
男gender>
藝術subject>
800salary>
teacher>
id = "10086">
畢卡索name>
男gender>
美術subject>
500salary>
teacher>
id = "10010">
小蒼老師name>
女gender>
生物subject>
1000salary>
teacher>
老師們》
《學生們
name = "學生">
number = "001">
王尼瑪name>
男gender>
一班class>
student>
number = "002">
康師傅name>
女gender>
三班class>
student>
number = "003">
張全蛋name>
男gender>
二班class>
student>
number = "004">
馬曉璐name>
女gender>
八班class>
student>
學生們》
學校》
我們先簡單地介紹一下dom4j中提供的一些簡單的api
1.建立流來解析資料
string path = system.getproperty("user.dir")+"/src/lessonxml/school.xml";
file
file = new
file(path);
//根據dom4j包提供的輸入流來解析檔案
saxreader reader = new saxreader();
//解析後得到的是解析文件
document document = reader.read(file);
2.通過解析到的解析文件來獲取根節點,以及根節點的屬性和根節點的內容
element rootelement = document.getrootelement();
//獲得根節點中的內容,要注意cdata中的內容是不參與解析的,因此獲取的時候包括括號中的空格,也會一起獲取到
string
string = rootelement.gettext();//這個獲取到的string中是包含空格鍵的
string string2 = rootelement.gettexttrim();//這種方法獲取到的string中的空格鍵,系統會幫你處理到最簡化
//通過key值來獲取屬性
attribute
attribute = rootelement.attribute("name");
//通過屬性來獲取屬性的value值
string attrivalue = attribute.getvalue;
//通過屬性來獲取屬性的key值
string attrikey = attribute.getname;
3.獲取子節點
//通過節點的name來獲取子節點
element childelement = rootelement.element("老師們");
//如果乙個節點下有多個子節點,可以獲取子節點的集合
list
elementlist = rootelement.elements();
4.也可以通過子節點來獲取父節點
element parentelement =childelement.getparent;
5.獲得乙個節點的name和節點中的內容
string name = childelement.getname();
string value = childelement.gettext();
解析xml檔案的大致思路:
我們要解析xml檔案,先要獲取xml檔案的路徑,然後通過dom4j中的輸入流來解析xml檔案,然後通過解析出的文件來獲取根節點,然後一層層地獲取子節點,知道最底層
最後的資料形式,大致是這樣的:每乙個學生都是乙個hashmap,然後所有的學生裝到學生們這個集合中,每乙個老師也都是乙個hashmap,然後所有的老師裝到老師們這個集合中,
最後學校是乙個hashmap,中裝著key為學生們,和key為老師們的map.
//獲取xml檔案的解析路徑
string path = system.getproperty("user.dir")+"/src/lessonxml/school.xml";
file file = new file(path);
//根據dom4j包提供的輸入流來解析檔案
saxreader reader = new saxreader();
//獲得解析到的文件
document document = reader.read(file);
//獲到根節點
element school = document.getrootelement();
//獲取根節點的子節點
element teachers = school.element("老師們");
element students = school.element("學生們");
//獲取子節點中的子節點
listteacherlist = teachers.elements();
liststudentlist = students.elements();
//存放老師們的集合collection
collectionstring, string>> teachercollection = new arraylist<>();
//獲取老師們的具體資料
for (element teacher : teacherlist) //遍歷老師們
//將老師乙個個存放到老師們的集合中
teachercollection.add(teachermap);
}system.out.println(teachercollection);
//建立存放學生們的集合
collectionstring, string>> studentcollection = new arraylist<>();
//獲取學生們的資料
for (element student : studentlist) //遍歷學生們
//將當前學生的map裝到學生們的collection中
studentcollection.add(studentmap);
system.out.println(studentmap);
}// 將學生們和老師們裝在到乙個map中
hashmap>> schoolmap = new hashmap<>();
schoolmap.put("teachers", teachercollection);
schoolmap.put("students", studentcollection);
//將這個map撞到乙個集合中
collectionstring, collectionstring, string>>>> schoolcollection = new arraylist<>();
schoolcollection.add(schoolmap);
system.out.println(schoolcollection);
Java解析xml檔案之JDOM
本篇部落格主要使用例項講解如何使用jdom解析xml檔案,不會對原始碼做分析。直接結合 進行說明。測試解析的xml檔案如下 name sourcedirectory value c log detail name destdirectory value c log detail name times...
Java 解析xml檔案
funtion.xml a儀器裝置管理 device 技術設施維護管理 b裝置校準檢修 device 技術設施維護管理 c裝置購置計畫 device 技術設施維護管理 d資料圖紙管理 informationand 技術資料圖紙管理 e站點基本資訊 station 站點裝置執行管理 f運 況 stat...
XML檔案解析之DOM解析
1.xml概念 xml 可擴充套件標誌語言 extensible markup language 1 是一種很像超文字標記語言 html 的標記語言 2 它的設計宗旨是傳輸和儲存資料,而不是顯示資料 html是用來顯示資料 3 最大特點是 它的標籤沒有被預定義 2.dom解析思路 dom解析xml時...