使用Pull解析器生成XML文件和读取xml文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。
一、布局界面
- <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".MainActivity" >
- <Button
- android:id="@+id/btn_pull"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- android:layout_alignParentTop="true"
- android:layout_marginTop="110dp"
- android:text="@string/btn_pull" />
- <Button
- android:id="@+id/btn_write"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignLeft="@+id/btn_pull"
- android:layout_alignRight="@+id/btn_pull"
- android:layout_below="@+id/btn_pull"
- android:layout_marginTop="61dp"
- android:text="@string/btn_write" />
- </RelativeLayout>
二、写一个xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <persons>
- <person id="23">
- <name>李明</name>
- <age>30</age>
- </person>
- <person id="20">
- <name>李向梅</name>
- <age>25</age>
- </person>
- </persons>
三、写一个和xml相对应的bean
- package com.example.lession04_pull.domain;
- import java.io.Serializable;
- public class Person implements Serializable{
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private int id;
- private String name;
- private short age;
- 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 short getAge() {
- return age;
- }
- public void setAge(short age) {
- this.age = age;
- }
- public Person(int id, String name, short age) {
- super();
- this.id = id;
- this.name = name;
- this.age = age;
- }
- public Person() {
- super();
- // TODO Auto-generated constructor stub
- }
- }
四、写一个Pul的服务类
- package com.example.lession04_pull.service;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.List;
- import org.xmlpull.v1.XmlPullParser;
- import org.xmlpull.v1.XmlSerializer;
- import android.os.Environment;
- import android.util.Xml;
- import com.example.lession04_pull.domain.Person;
- public class PullXmlService {
- public Person currentPerson;
- public List<Person> readXml(InputStream is){
- //声明返回值
- List<Person> persons=null;
- //首先利用Xml.newPullParser()获取解析对象
- XmlPullParser xmlPullParser=Xml.newPullParser();
- try{
- // 解析文件
- xmlPullParser.setInput(is, "UTF-8");
- //获取解析的事件类型
- int eventType=xmlPullParser.getEventType();
- //判断文件解析的是否完毕
- while(eventType!=XmlPullParser.END_DOCUMENT){
- switch (eventType) {
- case XmlPullParser.START_DOCUMENT:
- persons=new ArrayList<Person>();
- break;
- case XmlPullParser.START_TAG:
- String tagName=xmlPullParser.getName();
- if("person".equals(tagName)){
- //创建person对象
- currentPerson=new Person();
- currentPerson.setId(Integer.parseInt(xmlPullParser
- .getAttributeValue(null, "id")));
- }else if("name".equals(tagName)){
- currentPerson.setName(xmlPullParser.nextText());
- }else if("age".equals(tagName)){
- currentPerson.setAge(new Short(xmlPullParser.nextText()));
- }
- break;
- case XmlPullParser.END_TAG:
- if("person".equals(xmlPullParser.getName()) && currentPerson!=null){
- //把person对象放到集合中去
- persons.add(currentPerson);
- currentPerson=null;
- }
- break;
- }
- eventType=xmlPullParser.next();
- }
- is.close();
- }catch(Exception e){
- e.printStackTrace();
- }
- return persons;
- }
- // 写入
- public boolean write(List<Person> persons) {
- // 采用pull解析进行实现
- if (Environment.getExternalStorageState().equals(
- Environment.MEDIA_MOUNTED)) {
- // 获取sdcard目录 文件对象
- File sdCardDir = Environment.getExternalStorageDirectory();
- // 创建文件
- File file = new File(sdCardDir, "mycsdn.xml");
- XmlSerializer serializer = Xml.newSerializer();
- FileOutputStream fos = null;
- try {
- // 根据文件对象创建一个文件的输出流对象
- fos = new FileOutputStream(file);
- // 设置输出的流及编码
- serializer.setOutput(fos, "UTF-8");
- // 设置文件的开始
- serializer.startDocument("UTF-8", true);
- // persons标签开始
- serializer.startTag(null, "persons");
- for (Person person : persons) {
- // person标签的开始
- serializer.startTag(null, "person");
- // 设置person标签的属性
- serializer.attribute("null", "id", person.getId() + "");
- // 设置person标签的子标签 name
- serializer.startTag(null, "name");
- serializer.text(person.getName());
- serializer.endTag(null, "name");
- // 设置person标签的子标签的age
- serializer.startTag(null, "age");
- serializer.text(person.getAge() + "");
- serializer.endTag(null, "age");
- // person标签的结束
- serializer.endTag(null, "person");
- }
- // persons标签的结束
- serializer.endTag(null, "persons");
- // 文件的结束
- serializer.endDocument();
- fos.flush();
- fos.close();
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return false;
- }
- }
五、在MainActivity中调用测试
- package com.example.lession04_pull;
- import java.util.List;
- import com.example.lession04_pull.domain.Person;
- import com.example.lession04_pull.service.PullXmlService;
- import android.os.Bundle;
- import android.app.Activity;
- import android.view.Menu;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
- public class MainActivity extends Activity {
- public Button btn_pull,btn_write;
- public PullXmlService pullXmlService;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //实例化
- pullXmlService=new PullXmlService();
- btn_pull=(Button) findViewById(R.id.btn_pull);
- btn_write=(Button) findViewById(R.id.btn_write);
- btn_pull.setOnClickListener(new MyOnClickListener());
- btn_write.setOnClickListener(new MyOnClickListener());
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- class MyOnClickListener implements View.OnClickListener{
- @Override
- public void onClick(View v) {
- int id=v.getId();
- switch (id) {
- case R.id.btn_pull:
- List<Person> persons=null;
- try{
- persons=pullXmlService.readXml(getAssets().open("csdn.xml"));
- }catch(Exception e){
- e.printStackTrace();
- }
- if(persons!=null){
- Toast.makeText(MainActivity.this, "采用pull解析xml文件"+persons.get(0).getName()+"--"+persons.get(1).getName(),
- Toast.LENGTH_LONG).show();
- }
- break;
- case R.id.btn_write:
- try{
- List<Person> pers=pullXmlService.readXml(getAssets().open("csdn.xml"));
- //重新生成一个xml文件 mysdcare.xml
- boolean flag=pullXmlService.write(pers);
- if(flag){
- Toast.makeText(MainActivity.this, "采用pull解析生产xml文件成功",
- Toast.LENGTH_LONG).show();
- }else{
- Toast.makeText(MainActivity.this, "采用pull解析生产xml文件失败",
- Toast.LENGTH_LONG).show();
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- break;
- }
- }
- }
- }
http://blog.csdn.net/xueshuangshuang123/article/details/9016161
使用Pull解析器生成XML文件和读取xml文件的更多相关文章
- 使用Pull解析器生成XML文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- 安卓使用pull解析器解析XML文件
学习一下: public class MainActivity extends Activity { List<City> cityList; @Override protected vo ...
- 用PULL解析器解析XML文件
第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputS ...
- 黎活明8天快速掌握android视频教程--15_采用Pull解析器解析和生成XML内容
1.该项目主要有下面的两个作用 (1)将xml文件解析成对象的List对象,xml文件可以来自手机本地,也可以来自服务器返回的xml数据 (2)强list对象保存成xml文件,xml保存到手机的内存卡 ...
- 15_采用Pull解析器解析和生成XML内容
java还提供SAX和DOM用于解析XML Android还集成了Pull解析器——推荐 package cn.itcast.service; import java.io.InputStream; ...
- Android开发8——利用pull解析器读写XML文件
一.基本介绍 对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml.xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自 ...
- Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
- Android 下用 Pull 解析和生成 XML
Java 中是可以用 SAX 和 DOM 解析 XML 的,虽然在 Android 下也可以用这2中方式,但是还是推荐用 Pull.Pull 使用简单,效率相对高,Android 下是集成了 Pul ...
随机推荐
- pycharm-4.5.3 汉化教程(附汉化包)
汉化包地址 http://pan.baidu.com/s/1coLZau 密码: muu5 1.先找到Pycharm文件夹中的lib文件夹,将resources_en.jar复制到桌面并改名为res ...
- 关于DPM(Deformable Part Model)算法中模型结构的解释
关于可变部件模型的描写叙述在作者[2010 PAMI]Object Detection with Discriminatively Trained Part Based Models的论文中已经有说明 ...
- 基于库zkclient 的leader选举代码实现
利用了zookeeper临时节点,在当连接或session断掉时被删除这一特性来做选举.(简单简单互斥锁) 查了下网上的做法. 大致流程: <1>判定是否存在/wzgtest路径 < ...
- IOS内存等信息
1. 获取IOS APP占用的内存 #import <mach/mach.h> // ... void report_memory(void) { struct task_basic_in ...
- TCP异常终止(reset报文)
在之前做智能家居系统时,师弟做的服务端与WiFI盒子(客户端)进行通信时,总是出现异常情况,然后服务端不停地向客户端发送RESET报文,之前一直都不知道是什么情况,因此一直不知道是什么问题导致的,今天 ...
- yii phpexcel <转>
原文详情参见 这里 1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php ...
- Day5 - Python基础5 常用模块学习
Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...
- application/json IE 兼容问题
由于IE系列浏览器把application/json响应视为文件,并尝试下载在网上看了一下,大致了解,只要修改返回的内容的类型(ContentType)即可解决问题. 由于ajax请求,返回类型默认就 ...
- mysql查看binlog日志
1.语法:(用于在二进制日志中显示事件.如果您不指定’log_name’,则显示第一个二进制日志.LIMIT子句和SELECT语句具有相同的语法.) show binlog events [IN 'l ...
- xfire找不到services.xml
java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened be ...