Android学习记录(1)—Android中XML文件的序列化生成与解析
xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较简单的,咱不做介绍了,这里给大家讲一下xml的序列化生成和解析。不废话了,先上图,看怎么生成图中的xml数据。
首先,我把Person的实体类给大家贴出来,这个非常简单,我就不过多解释了,直接看代码就行了。
Person.java,代码如下:
package net.loonggg.test;
public class Person {
private int id;
private String age;
private String name;
private String sex;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person [id=" + id + ", age=" + age + ", name=" + name
+ ", sex=" + sex + ", address=" + address + "]";
}
}
其次:生成xml文件的方法如下:
/**
* 生成xml
*/
private void createXml() {
XmlSerializer serializer = Xml.newSerializer();// xml文件生成器
File file = new File(Environment.getExternalStorageDirectory(),
"person.xml");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
serializer.setOutput(fos, "utf-8");// 为xml生成器设置输出流和字符编码
serializer.startDocument("utf-8", true);// 开始文档,参数分别为字符编码和是否保持独立
serializer.startTag(null, "persons"); // 开始标签,参数分别为:命名空间和标签名
for (Person person : list) { serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId() + ""); serializer.startTag(null, "name");// 开始标签
serializer.text(person.getName());// 文本内容
serializer.endTag(null, "name");// 结束标签 serializer.startTag(null, "sex");
serializer.text(person.getSex());
serializer.endTag(null, "sex"); serializer.startTag(null, "age");
serializer.text(person.getAge());
serializer.endTag(null, "age"); serializer.startTag(null, "address");
serializer.text(person.getAddress());
serializer.endTag(null, "address"); serializer.endTag(null, "person"); }
serializer.endTag(null, "persons");// 结束标签
serializer.endDocument();// 结束xml文档
Toast.makeText(getApplicationContext(), "生成成功!", Toast.LENGTH_SHORT);
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "生成失败!", Toast.LENGTH_SHORT);
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
然后是解析xml文件的方法:
/**
* 解析xml文件
*/
private List<Person> pullXml() {
try {
File file = new File(Environment.getExternalStorageDirectory(),
"person.xml");
FileInputStream fis = new FileInputStream(file);
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();// 获取xml解析器
parser.setInput(fis, "utf-8");// 参数分别为输入流和字符编码
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {// 如果事件不等于文档结束事件就继续循环
switch (type) {
case XmlPullParser.START_TAG:
if ("persons".equals(parser.getName())) {
persons = new ArrayList<Person>();
} else if ("person".equals(parser.getName())) {
person = new Person();
String id = parser.getAttributeValue(0);
person.setId(Integer.parseInt(id));
} else if ("name".equals(parser.getName())) {
person.setName(parser.nextText());
} else if ("sex".equals(parser.getName())) {
person.setSex(parser.nextText());
} else if ("address".equals(parser.getName())) {
person.setAddress(parser.nextText());
} else if ("age".equals(parser.getName())) {
person.setAge(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(parser.getName())) {
persons.add(person);
person = null;
}
break;
}
type = parser.next();// 继续下一个事件
}
return persons;
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
再次是MainActivity里调用的部分代码:
public class MainActivity extends Activity {
private Button btn_create = null;
private Button btn_pull = null;
private TextView tv_show;
private List<Person> list = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_create = (Button) findViewById(R.id.createXml);
btn_pull = (Button) findViewById(R.id.pullXml);
tv_show = (TextView) findViewById(R.id.tvShow);
list = new ArrayList<Person>();
for (int i = 0; i < 5; i++) {
Person person = new Person();
person.setAge(i + 20 + "");
person.setId(i);
person.setName("loonggg" + i);
person.setSex("男");
person.setAddress("中南海" + i + 1 + "大街");
list.add(person);
}
btn_create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createXml();
}
});
btn_pull.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv_show.setText(pullXml().toString());
}
});
}
}
最后是布局文件,代码如下;
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <Button
android:id="@+id/createXml"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="生成xml" /> <Button
android:id="@+id/pullXml"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="解析xml" /> <TextView
android:id="@+id/tvShow"
android:layout_width="fill_parent"
android:layout_height="wrap_content" /> </LinearLayout>
到这里就完了,很简单吧!
代码下载地址:
http://download.csdn.net/detail/loongggdroid/6725669
Android学习记录(1)—Android中XML文件的序列化生成与解析的更多相关文章
- Android中XML文件的序列化生成与解析
xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习记录(3)—Android中ContentProvider的基本原理学习总结
一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...
- android基础知识13:AndroidManifest.xml文件解析
注:本文转载于:http://blog.csdn.net/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...
- .net中xml文件的导入使用(包括创建xml和导入xml)
上次有说到.net 创建xml文件的方法(一种固定方式,一种动态方法),这次记录一下怎样导入xml文件 1.导入xml文件的方法 1)xml文件格式
- 【Android学习入门】Android studio基本设置
1.背景设置 依次选择File->Settings-->Appearance & Behaviour->Apprearance,然后勾选 show line number. ...
- Java学习-040-级联删除目录中的文件、目录
之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...
- MyEclipse/Eclipse中XML文件的格式化配置
Eclipse中XML文件的格式化配置 MyEclipse: 这一步的配置是使格式化的效果为控件的每个属性配置占一行.进入 Window/Preferences,展开到 XML/XML Resourc ...
- Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理
Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理 >>>>>>>>>>>>>>>>& ...
随机推荐
- ICCV 2017 Best Paper Awards
[ICCV 2017 Best Paper Awards]今年的ICCV不久前公布了Best Paper得主,來自Facebook AI Research的Mask R-CNN[1],與RetineN ...
- 计算1到n的n次方之和
实现效果: 知识运用: Math类的Pow方法:返回指定数字的指定次幂 public static double Pow(double x,double y) 实现代码: public string ...
- PMVS论文随笔(1)
博客园排版系统真的比较挫,可以访问我的github.io阅读 关于Unit的概念 在pmvs的源代码中,有一个函数是getUnit ,其函数如下(在PMVS2的windows版本代码,optim.cc ...
- python中那个断言assert的优化
Python Assert 为何不尽如人意# Python中的断言用起来非常简单,你可以在assert后面跟上任意判断条件,如果断言失败则会抛出异常. Copy >>> assert ...
- map和set的遍历
map: 1.通过获取Entry: Entry的iterator for(Map.Entry<Float,String> entry : map.entrySet()) { System ...
- javaweb基础(35)_jdbc处理oracl大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- 【PC-x86-x64】JDK 32bit与64bit的区别及x64 PC的发展历程【转】
一次偶然分析的机会: 在进行Minecraft也就是所谓的我的世界游戏的时候,在对局域网进行开放的时候,我的是64bit的JDK,而我同学的是32bit的JDK,所以在进行局域网链接的时候就会出现In ...
- 第13章 GPIO-位带操作—零死角玩转STM32-F429系列
第13章 GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- CSS中margin: 0 auto;样式没有生效
问题:有两个元素: A, B.两则是嵌套关系,A是B的父节点.A和B都是块元素.当在A上设置:margin: 0 auto的时候,B并没有在页面中居中. margin: 0 auto 为什么没有生效? ...
- 关于package.json学习
1.如果要下载npm包,必须有package.json文件,不然会报错,如果缺少必要字符报错,参考报错信息 2.license,指定用户权限,可以不写,不会报错 3.devDependencies,依 ...