java之XML檔案的解析方法Dom4j

2021-08-14 11:00:21 字數 4606 閱讀 6660

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時...