使用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 ...
随机推荐
- 20个高级Java面试题
这是一个高级Java面试系列题中的第一部分.这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题. 程序员面试指南:https://www.youtube.com/ ...
- Mysql join语句解析
1. 右连接(right join, right outer join) 解释:以右表(Sys_Employee)为准,而左表(Sys_Department)中的记录只有当其DepartmentId在 ...
- 常用的Linux操作二
1.sudo 说明:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行 . 2.who 说明 : 显示系统中有那些使用者正在上面,显示的资料包含 ...
- 第七讲:HTML5中的canvas两个小球全然弹性碰撞
<html> <head> <title>小球之间的碰撞(全然弹性碰撞)</title> <script src="../js/jsce ...
- Linux cpuinfo 详解
在Linux系统中,如何详细了解CPU的信息呢? 当然是通过cat /proc/cpuinfo来检查了,但是比如几个物理CPU/几核/几线程,这些问题怎么确定呢? 经过查看,我的开发机器是1个物理C ...
- 《Android开发艺术探索》读书笔记 (11) 第11章 Android的线程和线程池
第11章 Android的线程和线程池 11.1 主线程和子线程 (1)在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程.Android中的主线程主要处理和界 ...
- Android -- 利用Broadcast开启Service(转)
Broadcast和Service都是Android四大组建之一的. 这里的广播是动态的,自己注册的一个广播. 这种最典型的用法就是利用开机广播,然后再起自己的服务,也就是在Android手机中做到开 ...
- Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command
错误如下: Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibEx ...
- ubuntu 修改运行级别
只转载了成功的, 具体参见原文 http://www.2cto.com/os/201308/237632.html 第一种方法:(内核级别的) Sudo vi /etc/default/grub ...
- iOS图片拉伸
常用的图片拉伸场景有:聊天页面的气泡,需要根据内容拉伸,但圆角拉伸后会变形,为避免圆角拉伸,可以指定拉伸区域.UIImage实体调用以下方法即可指定拉伸区域. - (UIImage *)stretch ...