Java之Pull方式產生xml檔案和解析xml檔案

來源:互聯網
上載者:User

標籤:xml   pull   kxml   java   

Pull XML解析器早已經被google整合到android sdk當中,它是google官方推薦的解析器。


如果我們要在Java案頭、J2ME等當中使用Pull方式產生xml檔案和解析xml檔案,需要用到kxml2;


KXML解析器是基於普通XML PULL解析器的一個小巧的解析器,官網是http://kxml.org/

普通XML PULL解析器的官網是http://xmlpull.org/


實驗開始:

在Eclipse中建立一個java項目,其中建立一個libs檔案夾,拷貝從網上下載的kxml2-2.2.2.jar檔案到其中,配置好編譯路徑;


我們要操作的xml檔案樣式如下:

 <?xml version="1.0" encoding="UTF-8"?>   <root>    <wisdom id="1">  <content>此刻打盹,你將做夢;而此刻學習,你將圓夢</content>   <author>哈佛圖書館</author>   </wisdom>  <wisdom id="2">   <content>我荒廢的今日,正是昨日殞身之人祈求的明日</content>  <author>哈佛圖書館</author>   </wisdom>    </root>


對應xml檔案中的每一個節點用一個實體類來描述:

public class Wisdom {private int id;private String content;private String author;public Wisdom() {super();}public Wisdom(String content, String author) {super();this.content = content;this.author = author;}public Wisdom(int id, String content, String author) {super();this.id = id;this.content = content;this.author = author;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}}


核心類有兩大功能:

1.解析

2.產生

import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.kxml2.io.KXmlParser;import org.kxml2.io.KXmlSerializer;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlSerializer;/** *  * @author Administrator *  */public class PullDemo {/** * 解析輸入資料流中的xml檔案 *  * @param is 輸入資料流 * @return 解析結果集 */public List<Wisdom> parseXml(InputStream is) {// 聲明傳回值List<Wisdom> wisdomList = null;// 擷取解析對象XmlPullParser xmlPullParser = new KXmlParser();try {// 設定輸入資料流的編碼xmlPullParser.setInput(is, "utf-8");// 擷取解析的事件類型int eventType = xmlPullParser.getEventType();// 聲明一個Wisdom引用Wisdom wisdom = null;// 判斷檔案解析的是否完畢while (eventType != XmlPullParser.END_DOCUMENT) {String tagName = xmlPullParser.getName();switch (eventType) {case XmlPullParser.START_DOCUMENT:wisdomList = new ArrayList<Wisdom>();break;case XmlPullParser.START_TAG:if ("wisdom".equals(tagName)) {// 建立wisdom對象wisdom = new Wisdom();wisdom.setId(Integer.parseInt(xmlPullParser.getAttributeValue(null, "id")));} else if ("content".equals(tagName)) {wisdom.setContent(xmlPullParser.nextText());} else if ("author".equals(tagName)) {wisdom.setAuthor(xmlPullParser.nextText());}break;case XmlPullParser.END_TAG:if ("wisdom".equals(tagName) && wisdom != null) {// 把wisdom對象加入到集合中去wisdomList.add(wisdom);wisdom = null;}break;}//讀取下一個事件eventType = xmlPullParser.next();}//關閉輸入資料流is.close();} catch (Exception e) {e.printStackTrace();}return wisdomList;}/** * 根據List列表中的內容產生xml檔案 *  * @param wisdomList *            裝在多個wisdom對象的List * @return true表示產生成功,false表示產生失敗 */public boolean createXML(List<Wisdom> wisdomList) {// 採用pull解析進行實現// 目標檔案路徑String filePath = "D:\\wisdoms.xml";// 目標檔案File file = new File(filePath);// 獲得xml序列化執行個體XmlSerializer serializer = new KXmlSerializer();// 檔案寫入流執行個體FileOutputStream fos = null;try {// 根據檔案對象建立一個檔案的輸出資料流對象fos = new FileOutputStream(file);// 設定輸出的流及編碼serializer.setOutput(fos, "utf-8");// 設定檔案的開始serializer.startDocument("UTF-8", true);// 設定檔案開始標籤serializer.startTag(null, "root");for (Wisdom wisdom : wisdomList) {// wisdom標籤的開始serializer.startTag(null, "wisdom");// 設定wisdom標籤的屬性serializer.attribute(null, "id", wisdom.getId() + "");// 設定wisdom標籤的子標籤 contentserializer.startTag(null, "content");serializer.text(wisdom.getContent());serializer.endTag(null, "content");// 設定wisdom標籤的子標籤的ageserializer.startTag(null, "author");serializer.text(wisdom.getAuthor());serializer.endTag(null, "author");// wisdom標籤的結束serializer.endTag(null, "wisdom");}// 設定檔案結束標籤serializer.endTag(null, "root");// 檔案的結束serializer.endDocument();serializer.flush();fos.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}}


在main方法中使用核心類,先在D盤(windows作業系統)產生xml檔案,然後解析這個xml檔案,把解析出來的集合列印到控制台。

import java.io.File;import java.io.FileInputStream;import java.util.ArrayList;import java.util.List;public class PullTest {public static void main(String[] args) {//*************初始化List列表集合****開始**************ArrayList<Wisdom> wisdomList = new ArrayList<>();Wisdom w = new Wisdom();w.setId(1);w.setContent("此刻打盹,你將做夢;而此刻學習,你將圓夢");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(2);w.setContent("我荒廢的今日,正是昨日殞身之人祈求的明日");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(3);w.setContent("覺得為時已晚的時候,恰恰是最早的時候");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(4);w.setContent("勿將今日之事拖到明日");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(5);w.setContent("學習時的苦痛是暫時的,未學到的痛苦是終生的");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(6);w.setContent("學習這件事,不是缺乏時間,而是缺乏努力");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(7);w.setContent("幸福或許不排名次,但成功必排名次");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(8);w.setContent("學習並不是人生的全部。但既然連人生的一部分——學習也無法征服,還能做什麼呢?");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(9);w.setContent("請享受無法迴避的痛苦");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(10);w.setContent("只有比別人更早、更勤奮地努力,才能嘗到成功的滋味");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(11);w.setContent("誰也不能隨隨便便成功,它來自徹底的自我管理和毅力");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(12);w.setContent("時間在流逝");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(13);w.setContent("現在流的口水,將成為明天的眼淚");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(14);w.setContent("狗一樣地學,紳士一樣地玩");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(15);w.setContent("今天不走,明天要跑");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(16);w.setContent("投資未來的人,是忠於現實的人");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(17);w.setContent("受教育程度代表收入");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(18);w.setContent("一天過完,不會再來");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(19);w.setContent("即使現在,對手也不停地翻動書頁");w.setAuthor("哈佛圖書館");wisdomList.add(w);w = new Wisdom();w.setId(20);w.setContent("沒有艱辛,便無所獲");w.setAuthor("哈佛圖書館");wisdomList.add(w);//*************初始化List列表集合****結束**************//建立PullDemo對象PullDemo pd = new PullDemo();//產生xml檔案pd.createXML(wisdomList);try {File file = new File("D:\\wisdoms.xml");//讀取檔案流FileInputStream fis = new FileInputStream(file);//調用解析xml方法獲得結果集合List<Wisdom> list = pd.parseXml(fis);//迴圈列印for (Wisdom wisdom : list) {System.out.println(wisdom.getContent());}} catch (Exception e) {System.out.println(e.getMessage());}}}


實驗結束。在此附上KXML2的jar包:kml2-2.2.2.jar


希望以上代碼對大家有所協助!

Java之Pull方式產生xml檔案和解析xml檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.