pull解析器: 反序列化與序列化

来源:http://www.cnblogs.com/rongsnow/archive/2016/01/26/5161324.html
-Advertisement-
Play Games

pull解析器:反序列化 讀取xml文件來獲取一個對象的數據 1 import java.io.FileInputStream; 2 import java.io.IOException; 3 import java.util.ArrayList; 4 import java.util.Lis...


 

  pull解析器:反序列化  讀取xml文件來獲取一個對象的數據

 

 1 import java.io.FileInputStream;
 2 import java.io.IOException;
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import org.xmlpull.v1.XmlPullParser;
 7 import org.xmlpull.v1.XmlPullParserException;
 8 import org.xmlpull.v1.XmlPullParserFactory;
 9 
10 public class ReadXmlTest {
11 
12     /**
13      *   pull解析器:反序列化     讀取xml文件來獲取一個對象的數據
14      * @param args
15      * @throws XmlPullParserException 
16      * @throws IOException 
17      */
18     public static void main(String[] args) throws XmlPullParserException, IOException {
19 
20         //1.導包
21         //2.獲取解析器工廠
22         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
23         //3.根據工廠獲取解析器對象
24         XmlPullParser parser = factory.newPullParser();
25         //4.設置輸入流
26         parser.setInput(new FileInputStream("src/student.xml"),"utf-8");
27         //5.解析
28         List<Student> list = null;
29         Student stu = null;
30         //獲取對應時間的類型
31         int type = parser.getEventType(); 
32         while(type != XmlPullParser.END_DOCUMENT){
33             //獲取標簽名稱
34             String tagname = parser.getName();
35             switch(type){
36             case XmlPullParser.START_TAG:
37                 //判斷標簽名稱
38                 if("students".equals(tagname)){
39                     //創建集合
40                     list = new ArrayList<Student>();
41                 }else if("student".equals(tagname)){
42                     //創建對象
43                     stu = new Student();
44                     //獲取ID屬性值
45                     String id = parser.getAttributeValue(0);
46                     //賦值
47                     stu.setId(id);
48                 }else if("name".equals(tagname)){
49                     //獲取標簽體的文本
50                     String name = parser.nextText();
51                     //賦值
52                     stu.setName(name);
53                 }else if("age".equals(tagname)){
54                     //獲取標簽體的文本
55                     String age = parser.nextText();
56                     //賦值
57                     stu.setAge(Integer.parseInt(age));
58             }
59                 break;
60             case XmlPullParser.END_TAG:
61                 if("student".equals(tagname)){
62                     //將對象添加到集合中
63                     list.add(stu);
64                     stu = null;
65                 }
66                 break;
67             default:
68                 break;
69             }
70         //向下走一步
71         parser.next();
72         //重新賦值
73         type = parser.getEventType();
74         }
75         //6.輸出
76         System.out.println(list);
77     }
78 }

 

------------------------------------------------------------------------------------------------

 

  pull解析器:序列化    將一個對象的數據  寫入到xml文件中

 

 1 import java.io.FileOutputStream;
 2 import java.io.IOException;
 3 
 4 import org.xmlpull.v1.XmlPullParserException;
 5 import org.xmlpull.v1.XmlPullParserFactory;
 6 import org.xmlpull.v1.XmlSerializer;
 7 
 8 public class WriteXmlTest {
 9 
10     /**pull解析器:序列化   將一個對象的數據  寫入到xml文件中
11      * @param args
12      * @throws XmlPullParserException 
13      * @throws IOException 
14      */
15     public static void main(String[] args) throws XmlPullParserException, IOException {
16 
17         Student stu = new Student("s_001", "小飛飛", 23);
18         //1.導包
19         //2.獲取解析器工廠
20         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
21         //3.根據工廠獲取解析器對象
22         XmlSerializer serializer = factory.newSerializer();
23         //4.設置輸出流
24         serializer.setOutput(new FileOutputStream("src/sss.xml"),"utf-8");
25         //5.寫入
26         //5.1寫文檔聲明  參數1:encoding屬性值,參數2:standalone屬性值
27         serializer.startDocument("utf-8", true);
28         //5.2寫入開始跟標簽
29         serializer.startTag(null, "students");
30         for(int i=0; i <5; i++){
31             //5.3寫入student標簽
32             serializer.startTag(null, "student");
33             
34             serializer.attribute(null, "id", stu.getId());
35             
36             serializer.startTag(null, "name");
37             serializer.text(stu.getName());
38             serializer.endTag(null, "name");
39             
40             serializer.startTag(null, "age");
41             serializer.text(String.valueOf(stu.getAge()));
42             serializer.endTag(null, "age");
43             
44             serializer.endTag(null, "student");
45         }
46         //5.4寫入結束標簽
47         serializer.endTag(null, "students");
48         //5.5寫入結束文檔
49         serializer.endDocument();
50         //反應結果
51         System.out.println("寫入完成,請去查看!");
52     }
53 }

 

  Student類

 

 1 public class Student {
 2 
 3     private String id;
 4     private String name;
 5     private int age;
 6     
 7     public Student() {
 8         super();
 9     }
10     public Student(String id, String name, int age) {
11         super();
12         this.id = id;
13         this.name = name;
14         this.age = age;
15     }
16     /**
17      * @return the id
18      */
19     public String getId() {
20         return id;
21     }
22     /**
23      * @param id the id to set
24      */
25     public void setId(String id) {
26         this.id = id;
27     }
28     /**
29      * @return the name
30      */
31     public String getName() {
32         return name;
33     }
34     /**
35      * @param name the name to set
36      */
37     public void setName(String name) {
38         this.name = name;
39     }
40     /**
41      * @return the age
42      */
43     public int getAge() {
44         return age;
45     }
46     /**
47      * @param age the age to set
48      */
49     public void setAge(int age) {
50         this.age = age;
51     }
52     /* (non-Javadoc)
53      * @see java.lang.Object#toString()
54      */
55     @Override
56     public String toString() {
57         return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
58     }
59 
60 }

 

  student.xml

 1 <?xml version='1.0' encoding='utf-8' ?>
 2 
 3 <students>
 4     <student id='s001'>
 5         <name>zhangsan</name>
 6         <age>23</age>
 7     </student>
 8         
 9     <student id="s002">
10         <name>lisi</name>
11         <age>24</age>
12     </student>
13 
14     <student id="s003">
15         <name>王五</name>
16         <age>25</age>
17     </student>
18     
19 </students>

 

導入的包名稱(pull解析器jar包):

  kxml2-2.3.0.jar

  xmlpull_1_1_3_4c.jar

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在有那麼多的JavaScript資源可供使用,很難分辨有多少是重疊和多餘的,更不要說識別無用信息。實際上,大部分的JavaScript技能培訓都是很糟糕的。
  • 在文章《前端開發的技術資料和雞湯美文彙總(一)》里,向大家介紹了前端入門的基礎資料,今天小編彙總了5篇前端技術進階實操的乾貨,趕緊來看看吧!另外,喜歡寫博客的工程師博主可以加工程師博主交流群:391519124,分享你的博文,和大牛們一起交流技術~一、助力Web開發20個超實用CSS庫在這篇文件章中...
  • 1.atom/electron github: "https://github.com/atom/electron" 中文文檔: "https://github.com/atom/electron/tree/master/docs translations/zh CN" 2.下載 ele...
  • 匿名函數沒有實際名字,也沒有指針,怎麼執行?關於匿名函數寫法,很發散~+號是讓函數聲明轉換為函數表達式。彙總一下最常見的用法:代碼如下:(function(){alert('water');})();當然也可以帶參數:代碼如下:(function(o){alert(o);})('water');想用...
  • 單選框和覆選框在網頁表單中應用十分廣泛,但是瀏覽器預設自帶的單選框和覆選框樣式不僅不統一,而且大多都比較簡單醜陋。本文給大家介紹了一些基於CSS3的個性化單選框和覆選框,一些選中動畫是基於jQuery的,你可以挑選喜歡的單選框和覆選框應用到自己的網頁中去,非常方便。1、jQuery超級個性化的單線框...
  • //本文支持js線上工具測試、轉載請註明出處。 UntitledDocument 點我點我 username:u p w d: 點我點我 出處:http://blog.csdn.net/xuexiaodong009/article/details/66054...
  • Node.js的介紹Node.js的是建立在Chrome的JavaScript的運行時,可方便地構建快速,可擴展的網路應用程式的平臺。Node.js使用事件驅動,非阻塞I/O模型,輕量、高效,可以完美地處理時時數據,運行在不同的設備上。1.1. 誰在用Node.js?從Node.js官方網站的企業登...
  • 詳細代碼: jQuery form插件的使用--處理server返回的JSON, XML,HTML數據 Demo 8 : jQuery form插件的使用--處理server返回的JSON, XML,HTML數據 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...