Java解析xml文件和json轉(zhuǎn)換的方法(DOM4j解析)
Java解析xml的方法有四種:
- DOM解析
- SAX解析
- JDOM解析
- DOM4J解析
本次主要介紹使用DOM4j進(jìn)行解析:
這里我主要使用兩種方式去解析:
xml文件內(nèi)容
<?xml version="1.0" encoding="utf-8"?> <books> <book id="1"> <name>金蘋(píng)果</name> <info>鋤禾日當(dāng)午</info> </book> <book id="2"> <name>銀蘋(píng)果</name> <info>蘋(píng)果很幸苦</info> </book> </books>
節(jié)點(diǎn)操作解析
public class Demo1 {
public static void main(String[] args) throws IOException, DocumentException {
// 獲取輸入流
FileInputStream fis = new FileInputStream("javaSE/src/com/practise/xml_json/book.xml");
// 創(chuàng)建xml的讀取對(duì)象
SAXReader reader = new SAXReader();
// 讀取xml文件
Document document = reader.read(fis);
// 獲取根節(jié)點(diǎn)對(duì)象
Element root = document.getRootElement();
// 獲取根節(jié)點(diǎn)的名字
List<Element> books = root.elements();
// 遍歷獲取第二個(gè)節(jié)點(diǎn)
for (int i = 0; i < books.size(); i++) {
Element book = books.get(i);
System.out.println(book.attributeValue("id"));
System.out.println(book.elementTextTrim("name"));
System.out.println(book.elementTextTrim("info"));
/*
使用循環(huán)一直獲取xml的內(nèi)容,個(gè)人認(rèn)為適合操作不知道標(biāo)簽的情況下操作,
以免造成內(nèi)存的浪費(fèi)。
*/
//List<Element> list = book.elements();
//for (int j = 0; j < list.size(); j++) {
// System.out.println(list.get(j).getTextTrim());
//}
}
fis.close();
}
}
運(yùn)行結(jié)果:

6. 使用XPATH進(jìn)行解析
public class XpathDemo {
/*
/ : 表示根節(jié)點(diǎn)
// : 從發(fā)起查找的節(jié)點(diǎn)開(kāi)始查找后代節(jié)點(diǎn)
. : 查找當(dāng)前節(jié)點(diǎn)
.. : 查找父節(jié)點(diǎn)
@ : 選擇屬性 *
使用方式:[@屬性名='值']
*/
public static void main(String[] args) throws FileNotFoundException, DocumentException {
FileInputStream fis = new FileInputStream("javaSE/src/com/practise/xml_json/book.xml");
SAXReader read = new SAXReader();
Document document = read.read(fis);
// 通過(guò)文檔對(duì)象+XPath查找所有的name節(jié)點(diǎn)
List<Node> names = document.selectNodes("http://name");
for (Node name : names) {
System.out.println(name.getName() + ":" + name.getText());
}
// 獲取指定id的name節(jié)點(diǎn)
Node node = document.selectSingleNode("http://book[@id='1']//name");
System.out.println(node.getName() + ":" + node.getText());
}
}
Java轉(zhuǎn)換json數(shù)據(jù),在這里我推薦兩個(gè)包,就是fastjson和gjson
fastjson作為alibaba的國(guó)內(nèi)開(kāi)源json包,也是很不錯(cuò)的,但是在1.2.69的版本上好像有bug,后面應(yīng)該已經(jīng)改善了。
gjson的作為谷歌的國(guó)外的開(kāi)源ison包,也有其優(yōu)勢(shì)。
我主要就是說(shuō)一說(shuō)這兩個(gè)開(kāi)源包的使用
- fastjson的使用
fastjson里面封裝了一個(gè)抽象的JSON類(lèi),里面有著許多靜態(tài)方法,所以我們不需要實(shí)例化對(duì)象,直接通過(guò)類(lèi)名.方法名就可以調(diào)用了。
public class FastJsonDemo {
public static void main(String[] args) {
// 將對(duì)象轉(zhuǎn)換為json數(shù)據(jù)
System.out.println(JSON.toJSON(new Book(1001, "水滸傳", "武松打虎")));
// 將json對(duì)象轉(zhuǎn)換為Java對(duì)象,注意不要把雙引號(hào)改為單引號(hào),這里的雙引號(hào)是通過(guò)了轉(zhuǎn)義的得到的
Book book = JSON.parseObject("{\"id\":1001,\"name\":\"水滸傳\",\"info\":\"武松打虎\"}", Book.class);
System.out.println(book.getName());
}
}
運(yùn)行結(jié)果:

-gjson的使用
gson使用起來(lái)相對(duì)于fastjson來(lái)說(shuō)有點(diǎn)復(fù)雜.
public class JsonDemo1 {
public static void main(String[] args) {
// 創(chuàng)建gson對(duì)象
Gson gson = new Gson();
// 轉(zhuǎn)換
Book book = new Book(1001, "水滸傳", "武松打虎");
String s = gson.toJson(book);
System.out.println(s);
System.out.println(gson.fromJson(s, Book.class));
}
}
運(yùn)行結(jié)果:

到此這篇關(guān)于Java解析xml文件和json轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)java xml文件json轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
eclipse漢化及jdk安裝環(huán)境配置超詳細(xì)教程(Java安裝教程)
這篇文章主要介紹了eclipse漢化及jdk安裝環(huán)境配置超詳細(xì)教程(Java安裝教程),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流
這篇文章主要介紹了spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Java用jxl讀取excel并保存到數(shù)據(jù)庫(kù)的方法
這篇文章主要為大家詳細(xì)介紹了Java用jxl讀取excel并保存到數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Spring整合WebSocket應(yīng)用示例(上)
以下教程是小編在參與開(kāi)發(fā)公司的一個(gè)crm系統(tǒng),整理些相關(guān)資料,在該系統(tǒng)中有很多消息推送功能,在其中用到了websocket技術(shù)。下面小編整理分享到腳本之家平臺(tái)供大家參考2016-04-04
關(guān)于MyBatisSystemException異常產(chǎn)生的原因及解決過(guò)程
文章講述了在使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)遇到的異常及其解決過(guò)程,首先考慮了事務(wù)問(wèn)題,但未解決,接著懷疑是MyBatis的一級(jí)緩存問(wèn)題,關(guān)閉緩存后問(wèn)題依舊存在,最終發(fā)現(xiàn)是SQL映射文件中的參數(shù)傳遞錯(cuò)誤,使用了錯(cuò)誤的標(biāo)簽導(dǎo)致循環(huán)插入2025-01-01
詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找)
本篇文章主要介紹了詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
Java中二叉樹(shù)的建立和各種遍歷實(shí)例代碼
這篇文章主要介紹了Java中二叉樹(shù)的建立和各種遍歷實(shí)例代碼,涉及樹(shù)節(jié)點(diǎn)的定義,后序遍歷,層序遍歷,深度優(yōu)先和廣度優(yōu)先等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Spring項(xiàng)目運(yùn)行依賴(lài)spring-contex解析
這篇文章主要介紹了Spring項(xiàng)目運(yùn)行依賴(lài)spring-contex解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05

