android关于pull解析步骤如下:

一、介绍:

此文主要是介绍利用pull解析器读取手机上的xml文件和把对象保存到xml文件中

二、新建一个android工程——PullXml

工程目录:

三、清单列表AndroidManifest.xml的配置为:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.pull"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <!--单元测试 加这句-->
        <uses-library android:name="android.test.runner" />
       
        <activity
            android:name=".PullXml6Activity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
   
    <!--单元测试加这句,其中android:targetPackage为当前应用的包名
    android:targetPackage 目标包是指单元测试的类的上面包和manifest的 
    package="com.example.pull" 保持一致     
          这样就决定了你建立测试类的时候也必须在这个包下面
    -->
 <instrumentation android:name="android.test.InstrumentationTestRunner"
 android:targetPackage="com.example.pull"
 android:label="Test for my app"/>"

</manifest>

四、Person .java实体类源码:

package com.example.domain;

public class Person {

private Integer id;
 private String name;
 private Integer age;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Integer getAge() {
  return age;
 }
 public void setAge(Integer age) {
  this.age = age;
 }
 @Override
 public String toString() {
  return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
 }
 public Person(Integer id, String name, Integer age) {
  super();
  this.id = id;
  this.name = name;
  this.age = age;
 }
 public Person() {
  super();
  // TODO Auto-generated constructor stub
 }
 
 
}

五、PersonService .java业务类源码

package com.example.service;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import com.example.domain.Person;

public class PersonService {

//由于没有使用类的成员变量所以可以把此方法声明为static方法
 public static List<Person> getPersons(InputStream xml) throws Exception{
  //XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();
  XmlPullParser pullParser = Xml.newPullParser();//得到XmlPullParser实例
  pullParser.setInput(xml,"UTF-8");//把xml放入pull解析器中
  int event = pullParser.getEventType();//得到触发的事件类型,为整形,跟踪返回的数字来选择要处理内容
  //xml节点(node)分 element节点和text节点,<elment节点>text节点</emenet节点>
  
  ArrayList<Person> persons=null;
  Person person = null;
  
  while(event != XmlPullParser.END_DOCUMENT){//判断是否读取文档结尾,为结尾跳出循环
   //0:文档开始 1:XmlPullParser.END_DOCUMENT 2:节点
   switch(event){//选择事件
       case XmlPullParser.START_DOCUMENT://文档开始
        persons = new ArrayList<Person>();//创建一个数组
        break;
       case XmlPullParser.START_TAG://节点开始标志
        
        if("person".equals(pullParser.getName())){//当节点在person时
         int id = Integer.parseInt(pullParser.getAttributeValue(0));//得到第一个节点的Id值
         person = new Person();
         person.setId(id);
        }
        if("name".equals(pullParser.getName())){//当节点指到name时
         String name = pullParser.nextText();//取得name节点后面的text节点的值
         if(person!=null){
               person.setName(name);
         }
        }
        if("age".equals(pullParser.getName())){//当节点指到age时
         int age = Integer.parseInt(pullParser.nextText());//取得age节点后面的text节点的值
         if(person!=null){
            person.setAge(age);
         }
        }
        break;
       case XmlPullParser.END_TAG://节点结束标志
        if("person".equals(pullParser.getName())){
         persons.add(person);
         person = null;
        }
        break;       
        
   }   
   event = pullParser.next();
  }
  
  
  return persons;
 }
 /**
  * 保存数据导xml文件中
  * @param persons 数据
  * @param out  输出方向
  * @throws Exception
  */
 public static void save(List<Person> persons,OutputStream out) throws Exception{
  //要用Pull解释器保存数据导XML中,要先得到一个xml序列化器
  XmlSerializer serializer = Xml.newSerializer();
  //设置内容的输出方向以及字符编码
  serializer.setOutput(out,"UTF-8");
  
  //设置文档开始,第二个参数:是否可以单独存在(true时:standalone='yes';false时:standalone='no')
  serializer.startDocument("UTF-8", true);
  //设置persons节点开始
  serializer.startTag(null, "persons");
  
  //循环迭代创建person节点以及name和age节点
  for(Person person:persons){
   //startTag参数:第一个是命名空间,第二个是开始节点名称
   serializer.startTag(null, "person");
   //attribute参数:第一个是命名空间,第二个是节点属性名称,第三个是节点属性值
   serializer.attribute(null, "id", person.getId().toString());
       serializer.startTag(null, "name");
         //text参数:text节点的值
         serializer.text(person.getName());
       serializer.endTag(null, "name");
       serializer.startTag(null, "age");
          serializer.text(person.getAge().toString());
       serializer.endTag(null, "age");
   //endTag参数:第一个是命名空间,第二个是结束节点名称
   serializer.endTag(null, "person");
  }
  
  //设置persons节点结束
  serializer.endTag(null, "persons");
  //设置文档结束
  serializer.endDocument();
  
  out.flush();//
  out.close();
  
 }
 
}
六、PersonServiceTest .java测试类源码:

package com.example.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import com.example.domain.Person;
import com.example.service.PersonService;

import android.test.AndroidTestCase;
import android.util.Log;

public class PersonServiceTest extends AndroidTestCase {
  
 public void testGetPersons() throws Exception{
  InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");
  
  List<Person> persons = PersonService.getPersons(xml);
     for(Person person:persons){
      Log.i("PersonService", person.toString());
     }
 }
 
 public void testSave() throws Exception{
  List<Person> persons = new ArrayList<Person>();
  persons.add(new Person(43,"zhangxx",20));
  persons.add(new Person(53,"lili",21));
  persons.add(new Person(423,"xiaoxiao",18));
  persons.add(new Person(412,"mimi",17));
  //包/files
  File xmlFile = new File(getContext().getFilesDir(),"test.xml");
  FileOutputStream fos = new FileOutputStream(xmlFile);
  PersonService.save(persons, fos);
 }
}
七、person.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
     <person id="22">
          <name>dada</name>
          <age>21</age>
     </person>
     <person id="100">
          <name>mm</name>
          <age>28</age>
     </person>
</persons>

八、注意事项以及相关知识点:

1、pull解析器工作原理同sax

2、pull解析xml文档特点:

从上到下顺序的读取,一个节点挨着一个节点的读取

xml节点分element节点和text节点

xml文档有开始和结束标志,节点也有开始和结束标志,如下标志:

<?xml version="1.0" encoding="UTF-8"?>//xml文档开始
<persons>//根节点开始        
    <person id="22">             
         <name>dada</name>  
           <age>21</age>          
    </person>                          
    <person id="100">            
         <name>mm</name>   
         <age>28</age>          
    </person>                        
</persons>//根节点结束

//xml文档结束

转载于:https://www.cnblogs.com/lz-cswb/archive/2012/05/24/2516850.html

android关于pull解析的问题-1相关推荐

  1. Android XML pull 解析器

    Android 并未提供对 Java StAX API 的支持.但是,Android 确实附带了一个 pull 解析器,其工作方式类似于 StAX.它允许您的应用程序代码从解析器中获取事件,这与 SA ...

  2. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  3. Android初级教程:Android中解析方式之pull解析

    在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...

  4. Android学习笔记---15_采用Pull解析器解析和生成XML内容

    15_采用Pull解析器解析和生成XML内容 -------------------------------------- 使用SAX或者DOM或者pull解析XML文件 -------------- ...

  5. android 远程下载与pull解析技术

    在android的应用开发中,我们常常会在项目开发的过程中遇到这样的需求:开发一个某移动应用客户端.这时,常常要从服务器获取我们所需要的数据.然后实时的显示在我们的客户端. 好吧,不多说了,切入主题! ...

  6. Android——网络交互,如何调用接口并且json解析json格式和pull解析xml格式

    本菜鸟因为之前一直使用的是公司前辈封装好的类(网络接口调用超级方便有木有)完全没有想过有一天我会自己写,然后今天接触的时候一脸懵逼,然后今天花了一天时间终于研究好了:哈哈哈哈哈 二话不说先上代码: p ...

  7. Android[中级教程]第五章 XML解析之PULL解析器

    这一章我们来学习Android中的XML解析器,Android中自带了三个XML解析器,有PULL,SAX,DOM解析器,其中PULL跟SAX都是以事件作为驱动导向的解析器,优点是占用内存小,处理速度 ...

  8. Android 学习之pull解析Xml

    一. PUll解析Xml public static List<Person> xmlParser(InputStream xml) throws Exception{List<Pe ...

  9. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /*** 短信的业务bean* @author Administrator ...

最新文章

  1. 如何检查一个Python字符串是否只包含数字?
  2. 轻松构建复杂数据集,永洪自服务数据查询功能详解
  3. Linux系统MySQL开启远程连接
  4. Java实现replaceAll 把 \ 替换成 /
  5. 用java swing做连连看_java基于swing实现的连连看代码
  6. 20180713 考试记录
  7. WinSDK学习--Document/View结构
  8. ReactNative入门之android与rn初始化参数的传递
  9. linux查看网卡型号
  10. Linux安装tomcat服务器
  11. 2022年全球程序员平均薪资发布,中国排名很意外
  12. Java精进-20分钟学会mybatis使用
  13. 4.2 metasploit 开发 exploit
  14. 注意:网站中出现以下违规内容-搜索引擎百度都不收录
  15. 智慧社区综合信息服务平台,让你的社区更智能
  16. H3C、思科路由器简单配置
  17. jdk1.7安装详细过程
  18. 描写火车站场景_描写火车站的句子_优美语句
  19. 微软的DreamSpark计划-学生可免费使用vs2008 pro,sql server Dev 2005,Expression Studio等产品...
  20. linux sed替换大小写,linux sed 批量替换字符串

热门文章

  1. Spring MVC拦截器(Interceptor)的配置及使用
  2. 软件测试的基础知识(二)
  3. microsoft visual c++全家桶_橡木桶——白兰地风味的“主宰”
  4. java可选项_在Java中链接可选项8
  5. led灯光衰怎么解决_花小钱办大事 主流直插式LED大灯横评
  6. vfp 界面_VFP之老树新花
  7. STM8 ADC转换模式-------单次扫描模式
  8. STM8学习笔记---新建IAR工程文件
  9. 如何将Windows下的文件传到Linux中
  10. MATLAB:如何保存图片到指定文件夹?