簡單使用SAXReader解析xml資料
阿新 • • 發佈:2019-01-07
之前的工作中,一直是使用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資料如下:
呼叫getName()方法獲取當前元素的元素名,attributeValue()獲取屬性名。如果當前元素沒有子元素,則呼叫getText()方法獲取元素值。
我把book.xml放在D盤的根目錄下,這樣讀取時能比較方便些…… 下面是程式碼:<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>
程式碼解析: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()); } }