有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。

一、布局界面

  1. <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10. <Button
  11. android:id="@+id/btn_pull"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_alignParentLeft="true"
  15. android:layout_alignParentRight="true"
  16. android:layout_alignParentTop="true"
  17. android:layout_marginTop="110dp"
  18. android:text="@string/btn_pull" />
  19. <Button
  20. android:id="@+id/btn_write"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:layout_alignLeft="@+id/btn_pull"
  24. android:layout_alignRight="@+id/btn_pull"
  25. android:layout_below="@+id/btn_pull"
  26. android:layout_marginTop="61dp"
  27. android:text="@string/btn_write" />
  28. </RelativeLayout>

二、写一个xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persons>
  3. <person id="23">
  4. <name>李明</name>
  5. <age>30</age>
  6. </person>
  7. <person id="20">
  8. <name>李向梅</name>
  9. <age>25</age>
  10. </person>
  11. </persons>

三、写一个和xml相对应的bean

  1. package com.example.lession04_pull.domain;
  2. import java.io.Serializable;
  3. public class Person implements Serializable{
  4. /**
  5. *
  6. */
  7. private static final long serialVersionUID = 1L;
  8. private int id;
  9. private String name;
  10. private short age;
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23. public short getAge() {
  24. return age;
  25. }
  26. public void setAge(short age) {
  27. this.age = age;
  28. }
  29. public Person(int id, String name, short age) {
  30. super();
  31. this.id = id;
  32. this.name = name;
  33. this.age = age;
  34. }
  35. public Person() {
  36. super();
  37. // TODO Auto-generated constructor stub
  38. }
  39. }

四、写一个Pul的服务类

  1. package com.example.lession04_pull.service;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.InputStream;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import org.xmlpull.v1.XmlPullParser;
  8. import org.xmlpull.v1.XmlSerializer;
  9. import android.os.Environment;
  10. import android.util.Xml;
  11. import com.example.lession04_pull.domain.Person;
  12. public class PullXmlService {
  13. public Person currentPerson;
  14. public List<Person> readXml(InputStream is){
  15. //声明返回值
  16. List<Person> persons=null;
  17. //首先利用Xml.newPullParser()获取解析对象
  18. XmlPullParser xmlPullParser=Xml.newPullParser();
  19. try{
  20. // 解析文件
  21. xmlPullParser.setInput(is, "UTF-8");
  22. //获取解析的事件类型
  23. int eventType=xmlPullParser.getEventType();
  24. //判断文件解析的是否完毕
  25. while(eventType!=XmlPullParser.END_DOCUMENT){
  26. switch (eventType) {
  27. case XmlPullParser.START_DOCUMENT:
  28. persons=new ArrayList<Person>();
  29. break;
  30. case XmlPullParser.START_TAG:
  31. String tagName=xmlPullParser.getName();
  32. if("person".equals(tagName)){
  33. //创建person对象
  34. currentPerson=new Person();
  35. currentPerson.setId(Integer.parseInt(xmlPullParser
  36. .getAttributeValue(null, "id")));
  37. }else if("name".equals(tagName)){
  38. currentPerson.setName(xmlPullParser.nextText());
  39. }else if("age".equals(tagName)){
  40. currentPerson.setAge(new Short(xmlPullParser.nextText()));
  41. }
  42. break;
  43. case XmlPullParser.END_TAG:
  44. if("person".equals(xmlPullParser.getName()) && currentPerson!=null){
  45. //把person对象放到集合中去
  46. persons.add(currentPerson);
  47. currentPerson=null;
  48. }
  49. break;
  50. }
  51. eventType=xmlPullParser.next();
  52. }
  53. is.close();
  54. }catch(Exception e){
  55. e.printStackTrace();
  56. }
  57. return persons;
  58. }
  59. // 写入
  60. public boolean write(List<Person> persons) {
  61. // 采用pull解析进行实现
  62. if (Environment.getExternalStorageState().equals(
  63. Environment.MEDIA_MOUNTED)) {
  64. // 获取sdcard目录 文件对象
  65. File sdCardDir = Environment.getExternalStorageDirectory();
  66. // 创建文件
  67. File file = new File(sdCardDir, "mycsdn.xml");
  68. XmlSerializer serializer = Xml.newSerializer();
  69. FileOutputStream fos = null;
  70. try {
  71. // 根据文件对象创建一个文件的输出流对象
  72. fos = new FileOutputStream(file);
  73. // 设置输出的流及编码
  74. serializer.setOutput(fos, "UTF-8");
  75. // 设置文件的开始
  76. serializer.startDocument("UTF-8", true);
  77. // persons标签开始
  78. serializer.startTag(null, "persons");
  79. for (Person person : persons) {
  80. // person标签的开始
  81. serializer.startTag(null, "person");
  82. // 设置person标签的属性
  83. serializer.attribute("null", "id", person.getId() + "");
  84. // 设置person标签的子标签 name
  85. serializer.startTag(null, "name");
  86. serializer.text(person.getName());
  87. serializer.endTag(null, "name");
  88. // 设置person标签的子标签的age
  89. serializer.startTag(null, "age");
  90. serializer.text(person.getAge() + "");
  91. serializer.endTag(null, "age");
  92. // person标签的结束
  93. serializer.endTag(null, "person");
  94. }
  95. // persons标签的结束
  96. serializer.endTag(null, "persons");
  97. // 文件的结束
  98. serializer.endDocument();
  99. fos.flush();
  100. fos.close();
  101. return true;
  102. } catch (Exception e) {
  103. e.printStackTrace();
  104. }
  105. }
  106. return false;
  107. }
  108. }

五、在MainActivity中调用测试

    1. package com.example.lession04_pull;
    2. import java.util.List;
    3. import com.example.lession04_pull.domain.Person;
    4. import com.example.lession04_pull.service.PullXmlService;
    5. import android.os.Bundle;
    6. import android.app.Activity;
    7. import android.view.Menu;
    8. import android.view.View;
    9. import android.widget.Button;
    10. import android.widget.Toast;
    11. public class MainActivity extends Activity {
    12. public Button btn_pull,btn_write;
    13. public PullXmlService pullXmlService;
    14. @Override
    15. protected void onCreate(Bundle savedInstanceState) {
    16. super.onCreate(savedInstanceState);
    17. setContentView(R.layout.activity_main);
    18. //实例化
    19. pullXmlService=new PullXmlService();
    20. btn_pull=(Button) findViewById(R.id.btn_pull);
    21. btn_write=(Button) findViewById(R.id.btn_write);
    22. btn_pull.setOnClickListener(new MyOnClickListener());
    23. btn_write.setOnClickListener(new MyOnClickListener());
    24. }
    25. @Override
    26. public boolean onCreateOptionsMenu(Menu menu) {
    27. // Inflate the menu; this adds items to the action bar if it is present.
    28. getMenuInflater().inflate(R.menu.main, menu);
    29. return true;
    30. }
    31. class MyOnClickListener implements View.OnClickListener{
    32. @Override
    33. public void onClick(View v) {
    34. int id=v.getId();
    35. switch (id) {
    36. case R.id.btn_pull:
    37. List<Person> persons=null;
    38. try{
    39. persons=pullXmlService.readXml(getAssets().open("csdn.xml"));
    40. }catch(Exception e){
    41. e.printStackTrace();
    42. }
    43. if(persons!=null){
    44. Toast.makeText(MainActivity.this, "采用pull解析xml文件"+persons.get(0).getName()+"--"+persons.get(1).getName(),
    45. Toast.LENGTH_LONG).show();
    46. }
    47. break;
    48. case R.id.btn_write:
    49. try{
    50. List<Person> pers=pullXmlService.readXml(getAssets().open("csdn.xml"));
    51. //重新生成一个xml文件  mysdcare.xml
    52. boolean flag=pullXmlService.write(pers);
    53. if(flag){
    54. Toast.makeText(MainActivity.this, "采用pull解析生产xml文件成功",
    55. Toast.LENGTH_LONG).show();
    56. }else{
    57. Toast.makeText(MainActivity.this, "采用pull解析生产xml文件失败",
    58. Toast.LENGTH_LONG).show();
    59. }
    60. }catch(Exception e){
    61. e.printStackTrace();
    62. }
    63. break;
    64. }
    65. }
    66. }
    67. }

http://blog.csdn.net/xueshuangshuang123/article/details/9016161

使用Pull解析器生成XML文件和读取xml文件的更多相关文章

  1. 使用Pull解析器生成XML文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  2. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  3. 安卓使用pull解析器解析XML文件

    学习一下: public class MainActivity extends Activity { List<City> cityList; @Override protected vo ...

  4. 用PULL解析器解析XML文件

    第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputS ...

  5. 黎活明8天快速掌握android视频教程--15_采用Pull解析器解析和生成XML内容

    1.该项目主要有下面的两个作用 (1)将xml文件解析成对象的List对象,xml文件可以来自手机本地,也可以来自服务器返回的xml数据 (2)强list对象保存成xml文件,xml保存到手机的内存卡 ...

  6. 15_采用Pull解析器解析和生成XML内容

    java还提供SAX和DOM用于解析XML Android还集成了Pull解析器——推荐 package cn.itcast.service; import java.io.InputStream; ...

  7. Android开发8——利用pull解析器读写XML文件

    一.基本介绍 对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml.xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自 ...

  8. Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  9. Android 下用 Pull 解析和生成 XML

    Java 中是可以用 SAX 和 DOM 解析 XML  的,虽然在 Android 下也可以用这2中方式,但是还是推荐用 Pull.Pull 使用简单,效率相对高,Android 下是集成了 Pul ...

随机推荐

  1. flume-ng 使用spool source 传输文件到hdfs

    Flume 1.4.0 User Guide 地址:http://archive.cloudera.com/cdh4/cdh/4/flume-ng-1.4.0-cdh4.6.0/FlumeUserGu ...

  2. 安卓ListView操作的两种方法

    举例做一个微信的中间部分(好友消息等信息通知) 第一种:BaseAdapter() package com.example.wx; import java.util.ArrayList;import ...

  3. Xcode7连接网络设置

    XCode7连接互联网的时候需要再info.plist设置(之前版本都不需要)连接网络NSAppTransportSecurity  字典NSAllowsArbitraryLoads    布尔  Y ...

  4. TeleMCU视频会议之Android版本号WebRTC client支持

    本文原创自 http://blog.csdn.net/voipmaker  转载注明出处. 最新版本号TeleMCU 添加了Android手机端WebRTC视频会议能力,Android手机安装Chro ...

  5. Android设置虚线、圆角、渐变

    有图又真相,先上图再说. 点击效果: 设置虚线: <?xml version="1.0" encoding="utf-8"?> <shape  ...

  6. CreateFont具体解释

    CFont * f;    f = new CFont;    f->CreateFont(10, // nHeight         0, // nWidth         0, // n ...

  7. 第三篇:数据仓库系统的实现与使用(含OLAP重点讲解)

    前言 上一篇重点讲解了数据仓库建模,它是数据仓库开发中最核心的部分.然而完整的数据仓库系统还会涉及其他一些组件的开发,其中最主要的是ETL工程,在线分析处理工具(OLAP)和商务智能(BI)应用等. ...

  8. Protobuf的自动反射消息类型的方法

    1. 每个消息头部中带上type name,作为消息的类型标识 2. 通过type name可以找到描述符Descriptor*, FindMessageTypeByName 3. 通过描述符Desc ...

  9. jquery ajax 提交表单(file && input)

    用到的插件 jquery.js jquery.form.js[http://malsup.github.io/jquery.form.js] 提交页面 <form enctype="m ...

  10. Poj 3368 Frequent values

    /* 线段树区间合并 维护几个信息 到时候乱搞一下就好了 开始T了 有一种情况可以不用递归 直接算出来 */ #include<iostream> #include<cstdio&g ...