1. 程式人生 > >簡單使用SAXReader解析xml資料

簡單使用SAXReader解析xml資料

之前的工作中,一直是使用json格式的資料進行資料傳輸。很少會接觸到xml格式的資料。不過因為工作需求,在對接其他產品的介面時,偶爾會遇到需要使用xml格式資料的情況,所以,也得學學如何解析xml。不過個人感覺,還是Json比較容易些啊,第一次解析xml時,我是一臉懵逼的,不過難者不會,會者不難,知道其中的原理和使用方法,其實發現xml也是很簡單而且很強大的。 簡單的學習一下xml,在w3school上看看就可以了:http://www.w3school.com.cn/xml/index.asp 看一下xml和Json之間的對比和差別,這篇部落格寫的還是很詳細的:http://www.cnblogs.com/SanMaoSpace/p/3139186.html 知乎的這個問題也不錯,學習學習漲姿勢:https://www.zhihu.com/question/25636060 下面就說說怎麼使用SAXReader來解析xml格式的資料吧。 首先當然是要匯入dom4j的jar包了。我們來造一個測試用的xml文件,好像一般入門的測試資料都是這個book.xml,我們也拿這個來簡單學習一下吧。 book.xml資料如下:
<books>
    <book>
        <author>Thomas</author>
        <title>Java從入門到放棄</title>
        <publisher>UCCU</publisher>
    </book>
    <book>
        <author>小白</author>
        <title>MySQL從刪庫到跑路</title>
        <publisher>Go Die</publisher>
    </book>
    <book>
        <author>PHPer</author>
        <title>Best PHP</title>
        <publisher>PHPchurch</publisher>
    </book>
</books>
我把book.xml放在D盤的根目錄下,這樣讀取時能比較方便些…… 下面是程式碼:
package com;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.List;

public class SAXReaderXML {
    public static void main(String[] args) throws Exception {
        SAXReader reader = new SAXReader();
        File xmlfile = new File("D:/books.xml");
        String xml = "<books><book><author>Thomas</author><title>Java從入門到放棄</title><publisher>UCCU</publisher>" +
                "</book><book><author>小白</author><title>MySQL從刪庫到跑路</title><publisher>GoDie</publisher></book>" +
                "<book><author>PHPer</author><title>BestPHP</title><publisher>PHPchurch</publisher></book></books>";
        Document fileDocument = reader.read(xmlfile);//從xml檔案獲取資料
        Document document = reader.read(new ByteArrayInputStream(xml.getBytes("utf-8")));//讀取xml字串,注意這裡要轉成輸入流
        Element root = document.getRootElement();//獲取根元素
        List<Element> childElements = root.elements();//獲取當前元素下的全部子元素

        for (Element child : childElements) {//迴圈輸出全部book的相關資訊
            List<Element> books = child.elements();
            for (Element book : books) {
                String name = book.getName();//獲取當前元素名
                String text = book.getText();//獲取當前元素值
                System.out.println(name + ":" + text);
            }
        }
        //獲取第二條書籍的資訊
        Element book2 = childElements.get(1);
        Element author = book2.element("author");//根據元素名獲取子元素
        Element title = book2.element("title");
        Element publisher = book2.element("publisher");
        System.out.println("作者:" + author.getText());//獲取元素值
        System.out.println("書名:" + title.getText());
        System.out.println("出版社:"+publisher.getText());
    }
}
程式碼解析:
1、讀取xml資料
SAXReader可以通過多種方式讀取xml資料,並返回Document格式的物件。通過檢視原始碼,可以看出read()方法接收File,InputStream和URL等格式的引數來讀取相應的xml資料。在程式碼裡我演示了讀取xml文件和xml格式的字串兩種方式。當然,字串要根據相應的編碼轉成輸入流才能被SAXReader讀取。
2、解析xml資料
讀取到Document物件後,我們使用getRootElement()方法獲取根元素,返回的是一個Element物件。在本例中,該元素的name即為books。
3、獲取子元素資料
獲取根元素後,便可以一層一層的去獲取他的子元素資訊。如果知道子元素的標籤名稱,便可以直接呼叫element("name")方法獲取該子元素。如果不知道子元素的名稱,或者想直接獲取該元素下的全部子元素,可以呼叫elements()方法獲取一個包括全部元素的list,然後進行下一步的處理。
4、輸出元素資訊
呼叫getName()方法獲取當前元素的元素名,attributeValue()獲取屬性名。如果當前元素沒有子元素,則呼叫getText()方法獲取元素值。