Java解析xml文件和json轉換的方法(DOM4j解析)

Java解析xml的方法有四種:

  1. DOM解析
  2. SAX解析
  3. JDOM解析
  4. DOM4J解析

本次主要介紹使用DOM4j進行解析:
這裡我主要使用兩種方式去解析:
xml文件內容

<?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>

節點操作解析

public class Demo1 {
   public static void main(String[] args) throws IOException, DocumentException {
       // 獲取輸入流
       FileInputStream fis = new FileInputStream("javaSE/src/com/practise/xml_json/book.xml");
       // 創建xml的讀取對象
       SAXReader reader = new SAXReader();
       // 讀取xml文件
       Document document = reader.read(fis);
       // 獲取根節點對象
       Element root = document.getRootElement();
       // 獲取根節點的名字
       List<Element> books = root.elements();
       // 遍歷獲取第二個節點
       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"));
           /*
               使用循環一直獲取xml的內容,個人認為適合操作不知道標簽的情況下操作,
               以免造成內存的浪費。
            */
           //List<Element> list = book.elements();
           //for (int j = 0; j < list.size(); j++) {
           //    System.out.println(list.get(j).getTextTrim());
           //}
       }
       fis.close();
   }
}

運行結果:

在這裡插入圖片描述

6. 使用XPATH進行解析

public class XpathDemo {
    /*
        /   : 表示根節點
        //  : 從發起查找的節點開始查找後代節點
        .   : 查找當前節點
        ..  : 查找父節點
        @   : 選擇屬性 *
              使用方式:[@屬性名='值']
     */
    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節點
        List<Node> names = document.selectNodes("//name");
        for (Node name : names) {
            System.out.println(name.getName() + ":" + name.getText());
        }

        // 獲取指定id的name節點
        Node node = document.selectSingleNode("//book[@id='1']//name");
        System.out.println(node.getName() + ":" + node.getText());
    }
}

Java轉換json數據,在這裡我推薦兩個包,就是fastjson和gjson
fastjson作為alibaba的國內開源json包,也是很不錯的,但是在1.2.69的版本上好像有bug,後面應該已經改善瞭。
gjson的作為谷歌的國外的開源ison包,也有其優勢。
我主要就是說一說這兩個開源包的使用

  • fastjson的使用

fastjson裡面封裝瞭一個抽象的JSON類,裡面有著許多靜態方法,所以我們不需要實例化對象,直接通過類名.方法名就可以調用瞭。

	public class FastJsonDemo {
    public static void main(String[] args) {
        // 將對象轉換為json數據
        System.out.println(JSON.toJSON(new Book(1001, "水滸傳", "武松打虎")));

        // 將json對象轉換為Java對象,註意不要把雙引號改為單引號,這裡的雙引號是通過瞭轉義的得到的
        Book book = JSON.parseObject("{\"id\":1001,\"name\":\"水滸傳\",\"info\":\"武松打虎\"}", Book.class);
        System.out.println(book.getName());
    }
}

運行結果:

在這裡插入圖片描述

-gjson的使用
gson使用起來相對於fastjson來說有點復雜.

public class JsonDemo1 {
    public static void main(String[] args) {
        // 創建gson對象
        Gson gson = new Gson();
        // 轉換
        Book book = new Book(1001, "水滸傳", "武松打虎");
        String s = gson.toJson(book);
        System.out.println(s);

        System.out.println(gson.fromJson(s, Book.class));
    }
}

運行結果:

在這裡插入圖片描述

到此這篇關於Java解析xml文件和json轉換的文章就介紹到這瞭,更多相關java xml文件json轉換內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: