xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较简单的,咱不做介绍了,这里给大家讲一下xml的序列化生成和解析。不废话了,先上图,看怎么生成图中的xml数据。

首先,我把Person的实体类给大家贴出来,这个非常简单,我就不过多解释了,直接看代码就行了。

Person.java,代码如下:

  1. package net.loonggg.test;
  2. public class Person {
  3. private int id;
  4. private String age;
  5. private String name;
  6. private String sex;
  7. private String address;
  8. public int getId() {
  9. return id;
  10. }
  11. public void setId(int id) {
  12. this.id = id;
  13. }
  14. public String getAge() {
  15. return age;
  16. }
  17. public void setAge(String age) {
  18. this.age = age;
  19. }
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public String getSex() {
  27. return sex;
  28. }
  29. public void setSex(String sex) {
  30. this.sex = sex;
  31. }
  32. public String getAddress() {
  33. return address;
  34. }
  35. public void setAddress(String address) {
  36. this.address = address;
  37. }
  38. @Override
  39. public String toString() {
  40. return "Person [id=" + id + ", age=" + age + ", name=" + name
  41. + ", sex=" + sex + ", address=" + address + "]";
  42. }
  43. }
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文件的方法如下:

  1. /**
  2. * 生成xml
  3. */
  4. private void createXml() {
  5. XmlSerializer serializer = Xml.newSerializer();// xml文件生成器
  6. File file = new File(Environment.getExternalStorageDirectory(),
  7. "person.xml");
  8. FileOutputStream fos = null;
  9. try {
  10. fos = new FileOutputStream(file);
  11. serializer.setOutput(fos, "utf-8");// 为xml生成器设置输出流和字符编码
  12. serializer.startDocument("utf-8", true);// 开始文档,参数分别为字符编码和是否保持独立
  13. serializer.startTag(null, "persons"); // 开始标签,参数分别为:命名空间和标签名
  14. for (Person person : list) {
  15. serializer.startTag(null, "person");
  16. serializer.attribute(null, "id", person.getId() + "");
  17. serializer.startTag(null, "name");// 开始标签
  18. serializer.text(person.getName());// 文本内容
  19. serializer.endTag(null, "name");// 结束标签
  20. serializer.startTag(null, "sex");
  21. serializer.text(person.getSex());
  22. serializer.endTag(null, "sex");
  23. serializer.startTag(null, "age");
  24. serializer.text(person.getAge());
  25. serializer.endTag(null, "age");
  26. serializer.startTag(null, "address");
  27. serializer.text(person.getAddress());
  28. serializer.endTag(null, "address");
  29. serializer.endTag(null, "person");
  30. }
  31. serializer.endTag(null, "persons");// 结束标签
  32. serializer.endDocument();// 结束xml文档
  33. Toast.makeText(getApplicationContext(), "生成成功!", Toast.LENGTH_SHORT);
  34. } catch (Exception e) {
  35. Toast.makeText(getApplicationContext(), "生成失败!", Toast.LENGTH_SHORT);
  36. e.printStackTrace();
  37. } finally {
  38. try {
  39. fos.close();
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. }
/**
* 生成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文件的方法:

  1. /**
  2. * 解析xml文件
  3. */
  4. private List<Person> pullXml() {
  5. try {
  6. File file = new File(Environment.getExternalStorageDirectory(),
  7. "person.xml");
  8. FileInputStream fis = new FileInputStream(file);
  9. List<Person> persons = null;
  10. Person person = null;
  11. XmlPullParser parser = Xml.newPullParser();// 获取xml解析器
  12. parser.setInput(fis, "utf-8");// 参数分别为输入流和字符编码
  13. int type = parser.getEventType();
  14. while (type != XmlPullParser.END_DOCUMENT) {// 如果事件不等于文档结束事件就继续循环
  15. switch (type) {
  16. case XmlPullParser.START_TAG:
  17. if ("persons".equals(parser.getName())) {
  18. persons = new ArrayList<Person>();
  19. } else if ("person".equals(parser.getName())) {
  20. person = new Person();
  21. String id = parser.getAttributeValue(0);
  22. person.setId(Integer.parseInt(id));
  23. } else if ("name".equals(parser.getName())) {
  24. person.setName(parser.nextText());
  25. } else if ("sex".equals(parser.getName())) {
  26. person.setSex(parser.nextText());
  27. } else if ("address".equals(parser.getName())) {
  28. person.setAddress(parser.nextText());
  29. } else if ("age".equals(parser.getName())) {
  30. person.setAge(parser.nextText());
  31. }
  32. break;
  33. case XmlPullParser.END_TAG:
  34. if ("person".equals(parser.getName())) {
  35. persons.add(person);
  36. person = null;
  37. }
  38. break;
  39. }
  40. type = parser.next();// 继续下一个事件
  41. }
  42. return persons;
  43. } catch (NumberFormatException e) {
  44. e.printStackTrace();
  45. } catch (FileNotFoundException e) {
  46. e.printStackTrace();
  47. } catch (XmlPullParserException e) {
  48. e.printStackTrace();
  49. } catch (IOException e) {
  50. e.printStackTrace();
  51. }
  52. return null;
  53. }
/**
* 解析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里调用的部分代码:

  1. public class MainActivity extends Activity {
  2. private Button btn_create = null;
  3. private Button btn_pull = null;
  4. private TextView tv_show;
  5. private List<Person> list = null;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. btn_create = (Button) findViewById(R.id.createXml);
  11. btn_pull = (Button) findViewById(R.id.pullXml);
  12. tv_show = (TextView) findViewById(R.id.tvShow);
  13. list = new ArrayList<Person>();
  14. for (int i = 0; i < 5; i++) {
  15. Person person = new Person();
  16. person.setAge(i + 20 + "");
  17. person.setId(i);
  18. person.setName("loonggg" + i);
  19. person.setSex("男");
  20. person.setAddress("中南海" + i + 1 + "大街");
  21. list.add(person);
  22. }
  23. btn_create.setOnClickListener(new View.OnClickListener() {
  24. @Override
  25. public void onClick(View v) {
  26. createXml();
  27. }
  28. });
  29. btn_pull.setOnClickListener(new View.OnClickListener() {
  30. @Override
  31. public void onClick(View v) {
  32. tv_show.setText(pullXml().toString());
  33. }
  34. });
  35. }
  36. }
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());
}
});
}
}

最后是布局文件,代码如下;

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <Button
  7. android:id="@+id/createXml"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="生成xml" />
  11. <Button
  12. android:id="@+id/pullXml"
  13. android:layout_width="fill_parent"
  14. android:layout_height="wrap_content"
  15. android:text="解析xml" />
  16. <TextView
  17. android:id="@+id/tvShow"
  18. android:layout_width="fill_parent"
  19. android:layout_height="wrap_content" />
  20. </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文件的序列化生成与解析的更多相关文章

  1. Android学习记录(1)—Android中XML文件的序列化生成与解析

    xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...

  2. 怎么在android的XML文件里加入凝视

    android的XML文件凝视一般採用 <!--凝视内容 -->的方式进行 在XML中,形如    <Button           />      的表示方式,当中&quo ...

  3. android 创建 xml文件

    android创建xml文件的方法. 要操作android的外部存储,所以要在AndroidManifest.xml文件中添加权限. <uses-permission android:name= ...

  4. android中的文件(图片)上传

    android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...

  5. 在android中读写文件

    在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外 ...

  6. MyEclipse/Eclipse中XML文件的格式化配置

    Eclipse中XML文件的格式化配置 MyEclipse: 这一步的配置是使格式化的效果为控件的每个属性配置占一行.进入 Window/Preferences,展开到 XML/XML Resourc ...

  7. 自动帮助创建android资源xml文件的网站

    自动帮助创建android资源xml文件的网站 http://android-holo-colors.com/ stack overflow上一个seekbar的例子: http://stackove ...

  8. Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理

    Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理 >>>>>>>>>>>>>>>>& ...

  9. Android中获取文件路径的方法总结及对照

    最近在写文件存贮,Android中获取文件路径的方法比较多,所以自己也很混乱.找了好几篇博客,发现了以下的路径归纳,记录一下,以备不时之需 Environment.getDataDirectory() ...

随机推荐

  1. Xcode使用小技巧-filter查找功能和查看最近修改的文件

    今天偶然发现了关于Xcode的一个小技巧: 1.查看最近修改的文件 2.使用filter查找制定文件 没错,就是下面这个东西,很容易忽略的一个小工具,在Xcode左下角位置. 通过这个,我们能够在整个 ...

  2. 浏览器跨域问题(jsonp)——jsonp详解

    json相信大家都用的多,jsonp我就一直没有机会用到,但也经常看到,只知道是“用来跨域的”,一直不知道具体是个什么东西.今天总算搞明白了.下面一步步来搞清楚jsonp是个什么玩意. 同源策略 首先 ...

  3. Python面向对象几个知识点

    一.判断对象是否属于类.判断类是否派生自某个类 class Zero: pass class One(Zero): pass class Two(One, Zero): pass # 判断对象是否完全 ...

  4. 给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合

    给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合 ruby代码: def all_possible_arr arr, length = 5 ret = [] leng ...

  5. 进阶之路(中级篇) - 017 有关于Arduino 驱动舵机及相关问题

    /********************************* 代码功能:通过串口控制电机 使用函数: Serial.available(); //判断串口是否接收到数据 Serial.prin ...

  6. fedora装机后要运行的脚本(原创)

    脚本:sh.sh #!/bin/zsh #安装rpmfusion源 dnf config-manager --add-repo=http://repo.fdzh.org/FZUG/FZUG.repo ...

  7. mac 终端添加颜色

    1.打开终端,然后找到终端偏好设置,选择自己喜欢的颜色 2.然后切换到当前用户的家目录: cd ~ 3.打开文件,开始编辑".bash_profile", 添加下面两句 expor ...

  8. 【java基础】Java反射机制

    一.预先需要掌握的知识(java虚拟机)  1)java虚拟机的方法区:  java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存 ...

  9. Docker 学习笔记 ---Docker组件

    Docker组件 1.  客户端:dockerclient 2.  服务端:dockerserver 3.  Docker镜像 4.  Registry 5.  Docker 容器 Docker客户端 ...

  10. CListCtrl的Report风格自绘

    原文链接: http://jingyan.baidu.com/article/5bbb5a1b38af1113eaa17910.html CListCtrl是MFC中运用最广泛的控件之一,很多软件都有 ...