Java解析xml文件和json轉(zhuǎn)換的方法(DOM4j解析)
Java解析xml的方法有四種:
- DOM解析
- SAX解析
- JDOM解析
- DOM4J解析
本次主要介紹使用DOM4j進行解析:
這里我主要使用兩種方式去解析:
xml文件內(nèi)容
<?xml version="1.0" encoding="utf-8"?> <books> <book id="1"> <name>金蘋果</name> <info>鋤禾日當午</info> </book> <book id="2"> <name>銀蘋果</name> <info>蘋果很幸苦</info> </book> </books>
節(jié)點操作解析
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的讀取對象
SAXReader reader = new SAXReader();
// 讀取xml文件
Document document = reader.read(fis);
// 獲取根節(jié)點對象
Element root = document.getRootElement();
// 獲取根節(jié)點的名字
List<Element> books = root.elements();
// 遍歷獲取第二個節(jié)點
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)容,個人認為適合操作不知道標簽的情況下操作,
以免造成內(nèi)存的浪費。
*/
//List<Element> list = book.elements();
//for (int j = 0; j < list.size(); j++) {
// System.out.println(list.get(j).getTextTrim());
//}
}
fis.close();
}
}
運行結(jié)果:

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

-gjson的使用
gson使用起來相對于fastjson來說有點復(fù)雜.
public class JsonDemo1 {
public static void main(String[] args) {
// 創(chuàng)建gson對象
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));
}
}
運行結(jié)果:

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

