XML
2015-11-05 15:48
260 查看
package com.example.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.util.Xml; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); writeXML(); } /** * 往磁盘上写一个xml文件 * * <?xml version="1.0" encoding="UTF-8" standalone="true"?> //文档的神明 <persons> //标签tag <person id=“18"> //ID是person标签的一个属性 <name>allen</name> <age>36</age> </person> <person id=“28"> <name>james</name> <age>25</age> </person> </persons> * */ public void writeXML() { //解析xml >> pull //XmlPullParser parser = Xml.newPullParser(); //XML 序列化工具类 XmlSerializer serializer = Xml.newSerializer(); File path = new File(Environment.getExternalStorageDirectory(),"persons.xml"); try { FileOutputStream out = new FileOutputStream(path); serializer.setOutput(out, "utf-8"); //给序列化工具设置输出路径和输出编码 //准备序列化的内容 serializer.startDocument("utf-8", true); //文档的申明开始 //persons标签 serializer.startTag(null, "persons"); // namespace 命名空间 一般为null ,name :代表的是标签名 //person 标签 serializer.startTag(null, "person"); serializer.attribute(null, "id", "18"); // 用来指定标签的属性 //构建name标签 serializer.startTag(null, "name"); serializer.text("zs"); // 设置一个标签之间的文本内容 serializer.endTag(null, "name"); //构建name标签 serializer.startTag(null, "age"); serializer.text("18"); // 设置一个标签之间的文本内容 serializer.endTag(null, "age"); serializer.endTag(null, "person"); serializer.endTag(null, "persons"); serializer.endDocument(); //文档申明结束 } catch (Exception e) { e.printStackTrace(); } } public void parserXML() { } }
package com.xh.tx.bean; public class Person { private int id; private String name; private String email; private String address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Person() { super(); } public Person(int id, String name, String email, String address) { super(); this.id = id; this.name = name; this.email = email; this.address = address; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", email=" + email + ", address=" + address + "]"; } }
package com.example.xml2; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import com.xh.tx.bean.Person; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.util.Xml; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<Person> list = new ArrayList<Person>(); Person p = null; for(int i=0; i <10; i++ ) { p = new Person(i,"zs" + i,"32432432@qq.com","西安南路" + i+ "号"); list.add(p); } writePerson(list); readPerson(); } /** * 有一个List<Person> list ; * 把list里面的所有对象序列化到sdcard里面形成一个xml文件 */ public void writePerson(List<Person> list) { if(null == list) { return; } XmlSerializer serializer = Xml.newSerializer(); File path = new File(Environment.getExternalStorageDirectory(),"list_person.xml"); try { FileOutputStream out = new FileOutputStream(path); serializer.setOutput(out, "utf-8"); //开始序列化xml serializer.startDocument("utf-8", true); //根 serializer.startTag(null, "persons"); for(Person p : list) { serializer.startTag(null, "person"); serializer.attribute(null, "id", String.valueOf(p.getId()));//推进使用String.valueOf 将其他类型的对象转化为string对象 serializer.startTag(null, "name"); serializer.text(p.getName()); //<name>allen</name> serializer.endTag(null, "name"); serializer.startTag(null, "email"); serializer.text(p.getEmail()); serializer.endTag(null, "email"); serializer.startTag(null, "address"); serializer.text(p.getAddress()); serializer.endTag(null, "address"); serializer.endTag(null, "person"); } serializer.endTag(null, "persons"); serializer.endDocument(); } catch (Exception e) { e.printStackTrace(); } } public void readPerson() { //工具类 我们称这种方式为pull解析(DOM,SAX,DOM4J) XmlPullParser parser = Xml.newPullParser(); try { FileInputStream in = new FileInputStream(new File(Environment.getExternalStorageDirectory(),"list_person.xml")); parser.setInput(in, "utf-8");//设置你要解析那个文件,已什么编码格式把它读入到内存 //下面开始解析xml int eventType = parser.getEventType(); List<Person> list = null; Person p = null; while(eventType != parser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: //访问静态变量的时候用类名来访问,不要用对象去调用 if("persons".equals(parser.getName())) { list = new ArrayList<Person>(); }else if("person".equals(parser.getName())) //当遇到了person节点的时候创建person对象并解析id属性给person对象 { p = new Person(); int id = Integer.parseInt(parser.getAttributeValue(null, "id")); p.setId(id); }else if("name".equals(parser.getName())) { String name = parser.nextText(); //一般用nextText 不用getText p.setName(name); }else if("email".equals(parser.getName())) { String email = parser.nextText(); //一般用nextText 不用getText p.setEmail(email); }else if("address".equals(parser.getName())) { String address = parser.nextText(); //一般用nextText 不用getText p.setAddress(address); } break; case XmlPullParser.END_TAG: if("person".equals(parser.getName()))//表示person结束了,将person对象加入到list中 { list.add(p); p = null; //及时的让我们不用的对象成为垃圾 } break; default: break; } eventType = parser.next(); //尤其容易忘记 } //打印一下解析出来的所有对象 for(Person person : list) { Log.d(TAG, person.toString()); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- 基于linux-2.6.38.8内核的SDIO/wifi驱动分析
- RegExp正则表达式
- listview 中的控件抢占焦点问题
- LaTeX新人教程,30分钟从完全陌生到基本入门
- 按键通用程序处理模型
- [转载]Jmeter那点事·ForEach和If控制器
- 自定义View很简单 - Android翻页效果原理实现之模拟扭曲
- AIX操作系统vi命令的使用方式
- 机器学习
- easyui datagrid 只有点击checkbox才起选中或者取消作用
- leetcode 166:Fraction to Recurring Decimal java实现(细致分析)
- OpenGL ES 3.0之Shading Language(八)
- Android Socket通信
- ios的@property属性和@synthesize属性
- 关于LDA主题模型的理解
- 自定义View很简单 - Android翻页效果原理实现之曲线的实现
- 协同过滤算法 R/mapreduce/spark mllib多语言实现
- asp.net calender控件显示一周之内的日期
- 多线程
- 图片的旋转