ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android 通过pull解析xml文件

2019-09-15 11:41:52  阅读:245  来源: 互联网

标签:xml pull personList person new import android null serializer


原文链接:https://my.oschina.net/u/2529405/blog/663602
  1 package com.example.xmldemo.test;
  2 
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileNotFoundException;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.io.InputStreamReader;
  9 import java.util.ArrayList;
 10 import java.util.List;
 11 
 12 import org.xmlpull.v1.XmlPullParser;
 13 import org.xmlpull.v1.XmlSerializer;
 14 
 15 import com.example.xmldemo.Person;
 16 
 17 import android.os.Environment;
 18 import android.test.AndroidTestCase;
 19 import android.util.Log;
 20 import android.util.Xml;
 21 
 22 public class XmlTest extends AndroidTestCase
 23 {    
 24     public void test()
 25     {
 26         writeLocal();
 27         
 28         List<Person> personList = parseXml();
 29         for(Person person : personList)
 30         {
 31             Log.i("XmlTest", person.toString());
 32         }
 33     }
 34     /**
 35      * 写xml文件大本地
 36      */
 37     public void writeLocal()
 38     {
 39         List<Person> personList = getPersonList();
 40         //获得序列化对象
 41         XmlSerializer serializer = Xml.newSerializer();
 42         // 
 43         try
 44         {
 45             //创建文件流对象
 46             File file = new File("data/data/com.example.xmldemo", "persons.xml");
 47             FileOutputStream fos = new FileOutputStream(file);
 48             //设置文件的输出流
 49             serializer.setOutput(fos, "UTF-8");
 50             serializer.startDocument("utf-8", true); //<?xml version
 51             serializer.startTag(null, "persons"); //<persons>
 52             for(Person person : personList)
 53             {
 54                 serializer.startTag(null, "person"); //<person>
 55                 serializer.attribute(null, "id", String.valueOf(person.getId()));
 56                 serializer.startTag(null, "name"); //<name>
 57                 serializer.text(person.getName()); // kite1
 58                 serializer.endTag(null, "name"); //</name>
 59                 serializer.startTag(null, "age"); //<age>
 60                 serializer.text(String.valueOf(person.getAge()));
 61                 serializer.endTag(null, "age");//</age>
 62                 serializer.endTag(null, "person"); //<person>
 63             }
 64             serializer.endTag(null, "persons"); //</persons>
 65             serializer.endDocument();
 66             serializer.flush();
 67             fos.flush();
 68             fos.close();
 69         } catch (Exception e)
 70         {
 71             e.printStackTrace();
 72         }
 73         
 74     }
 75     /**
 76      * 获得personList
 77      * @return
 78      */
 79     public List<Person> getPersonList()
 80     {
 81         List<Person> personList = new ArrayList<Person>();
 82         for(int i = 0; i < 30; i++)
 83         {
 84             Person person = new Person(i, "kite" + 1,18 + i);
 85             personList.add(person);
 86         }
 87         return personList;
 88     }
 89     
 90     public List<Person> parseXml()
 91     {
 92     
 93         try
 94         {
 95             //创建文件流对象
 96             File file = new File("data/data/com.example.xmldemo", "persons.xml");
 97             FileInputStream fis = new FileInputStream(file);
 98             //获得pull 解析对象
 99             XmlPullParser parser = Xml.newPullParser();
100             // 指定解析的文件和编码格式
101             parser.setInput(fis,"utf-8");
102             int eventType = parser.getEventType(); //获得事件的类型
103             
104             //初始化集合
105             List<Person> personList = null;
106             Person person = null;
107             //如果不是最后的endDocument
108             while(eventType != XmlPullParser.END_DOCUMENT)
109             {
110                 String tagName = parser.getName();
111                 switch (eventType)
112                 {
113                 case XmlPullParser.START_TAG:
114                         //如果是最开始的persons 根节点初始化
115                         if("persons".equals(tagName))
116                         {
117                             personList = new ArrayList<Person>();
118                         } else if("person".equals(tagName))
119                         {
120                             //初始化person对象
121                             person = new Person();
122                             
123                             //获得id
124                             String id =  parser.getAttributeValue(null, "id");
125                             person.setId(Integer.parseInt(id));
126                         } else if("name".equals(tagName))
127                         {
128                             person.setName(parser.nextText());
129                         } else if("age".equals(tagName))
130                         {
131                             person.setAge(Integer.parseInt(parser.nextText()));
132                         }
133                     break;
134                 case XmlPullParser.END_TAG:
135                     //如果是结束标记
136                     if("person".equals(tagName))
137                     {
138                         // 需要把上面设置好值的person对象添加到集合中
139                         personList.add(person);
140                     } 
141                     break;
142                 default:    
143                     break;
144                 }
145                 //获得下一个事件
146                 eventType = parser.next();
147             }
148             return personList;
149         } catch (Exception e)
150         {
151             // TODO Auto-generated catch block
152             e.printStackTrace();
153         }
154         return null;
155     }
156     
157 }
View Code

 

转载于:https://my.oschina.net/u/2529405/blog/663602

标签:xml,pull,personList,person,new,import,android,null,serializer
来源: https://blog.csdn.net/cheyikeng1099/article/details/100849883

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有