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 + "]";
- }
- }
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
*/
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;
- }
/**
* 解析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());
- }
- });
- }
- }
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>
<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中XML文件的序列化生成与解析的更多相关文章
- Android学习记录(1)—Android中XML文件的序列化生成与解析
xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...
- 怎么在android的XML文件里加入凝视
android的XML文件凝视一般採用 <!--凝视内容 -->的方式进行 在XML中,形如 <Button /> 的表示方式,当中&quo ...
- android 创建 xml文件
android创建xml文件的方法. 要操作android的外部存储,所以要在AndroidManifest.xml文件中添加权限. <uses-permission android:name= ...
- android中的文件(图片)上传
android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...
- 在android中读写文件
在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外 ...
- MyEclipse/Eclipse中XML文件的格式化配置
Eclipse中XML文件的格式化配置 MyEclipse: 这一步的配置是使格式化的效果为控件的每个属性配置占一行.进入 Window/Preferences,展开到 XML/XML Resourc ...
- 自动帮助创建android资源xml文件的网站
自动帮助创建android资源xml文件的网站 http://android-holo-colors.com/ stack overflow上一个seekbar的例子: http://stackove ...
- Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理
Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理 >>>>>>>>>>>>>>>>& ...
- Android中获取文件路径的方法总结及对照
最近在写文件存贮,Android中获取文件路径的方法比较多,所以自己也很混乱.找了好几篇博客,发现了以下的路径归纳,记录一下,以备不时之需 Environment.getDataDirectory() ...
随机推荐
- com.android.providers.telephony.MmsSmsDatabaseHelper
SmsProvider, MmsProvider, MmsSmsProvider利用MmsSmsDatabaseHelper来操作数据库. 1. MmsSmsDatabaseHelper继承了SQLi ...
- 零行代码为 App 添加异常加载占位图
前文提要 近期准备重构项目,需要重写一些通用模块,正巧需要设置App异常加载占位图的问题,心血来潮设想是否可以零行代码解决此问题,特在此分享实现思路. 思路分享 对于App占位图,通常需要考虑的控件有 ...
- 集成支付宝钱包支付 iOS SDK 的方法与经验
下载 首先,你要想找到这个SDK,都得费点功夫.现在的SDK改名叫移动支付集成开发包了,下载页面在 这里 (http://t.cn/8ksiklD)的 “请点此下载集成开发包(http://t.cn/ ...
- ubuntu下安装配置minicom(解决默认的端口/dev/tty8,改不过来的问题)
Minicom是linux下串口通信的软件,下面讲下ubuntu Minicom的安装和配置. 安装: sudo apt-get install minicom 或在新立得软件包管理器中搜索“mini ...
- Andoird通信之简单聊天ChatApp
Android通信,大体上的逻辑是跟Java上的通信是差不多的,只是因为Android线程不能直接访问UI界面组件,所以在处理的时候有些麻烦,只要是通过Handle处理. 接下来是一个简单地手机聊天A ...
- 【java】详解JDK的安装和配置
目录结构: contents structure [+] 什么是JDK JDK的三个版本 JDK包含的主要内容 JDK的安装 JDK的配置 配置JAVA_HOME 配置PATH 到底自己需不需要配置C ...
- Python ---chart
# -*- coding:utf-8 -*- import random import matplotlib.pyplot as plt from pylab import * import os i ...
- Linux VFS数据结构
先说明一下,linux内核中各种数据结构也不停的在变,所以不同版本的内核各个数据结构的定义可能会差别很大,这一组关于linux 文件系统的文章中的代码都摘自linux-2.6.34.1. VFS依赖于 ...
- java数组随机排序实现代码
例一 代码如下 复制代码 import java.lang.Math;import java.util.Scanner;class AarrayReverse{ public static void ...
- 构建高性能J2EE应用的五种核心策略
对于J2EE,我们知道当开发应用时,在架构设计阶段的决定将对应用的性能和可扩展性产生深远的影响.现在当开发一个应用项目时,我们越来越多地注意到了性能和可扩展性的问题.应用性能的问题比应用功能的不丰富问 ...