安卓和JAVA解析xml文件的三种方式:

1、PULL解析

2、SAX解析

3、DOM解析

三者各有所长,依情况选择解析方式

1、PULL和SAX均采用流式解析,意味着只能从头读到底,无法像DOM解析一样随机访问xml文件中的任意一个节点

2、PULL和SAX占用更少的内存解析,更适用于安卓上的解析xml文件

3、DOM解析时将文件全部解析完,最后让用户任意取特定的信息

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面学习PULL解析方式。(PULL方法的简洁性是它最大的优势)

1、解析本地xml文件

  public class PullParser {

      public List<Worker> pullParsers() throws XmlPullParserException, IOException
      {
          List<Worker> list = null;
          Worker worker = null;
          //第一步:创建XML解析对象,需要通过工厂模式创建类的实例
          XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
          XmlPullParser parser = factory.newPullParser();
 //        第二步:设置待解析的xml数据源
         FileInputStream fis = new FileInputStream("worker.xml");
         parser.setInput(fis,"utf-8");
 //        第三步:获取当前xml标签的事件类型
         int event = parser.getEventType();
 //        第四步:通过分支语句处理不同的事件标签
         while(event!=XmlPullParser.END_DOCUMENT)
         {

             switch(event)
             {
 //            第五步:获取标签名称,处理标签信息
             case XmlPullParser.START_DOCUMENT://解析文件开始,创建列表集合对象
                 list = new ArrayList<Worker>();
                 break;
             case XmlPullParser.START_TAG:
                 String tagName = parser.getName();
                 if("worker".equals(tagName))
                 {
                     worker = new Worker();
                     int count = parser.getAttributeCount();//得到属性的个数
                     ;i<count;i++)
                     {
                         String attrName = parser.getAttributeName(i);
                         String attrValue = parser.getAttributeValue(i);
                         if("id".equals(attrName))
                             worker.setId(attrValue);
                     }
                 }
                 else if("name".equals(tagName))
                     worker.setName(parser.nextText());
                     worker.setMoney(Double.parseDouble(parser.nextText()));
                 break;

             case XmlPullParser.END_TAG://解析文件结束,
                  if("worker".equals(parser.getName()))
                  {
 //                第六步:将处理的数据保存到JavaBean或Map对象中
                      list.add(worker);
                      worker = null;
                  }
                  break;
             }
 //            第七步:获取下一个标签的事件类型,判断事件类型是否为文档结束事件,如果是则退出,反之重复第四、五、六步
             event = parser.next();
         }
         return list;
     }

     /**
60      * @param args
61      * @throws IOException
62      * @throws XmlPullParserException
63      */
     public static void main(String[] args) throws XmlPullParserException, IOException {
         PullParser  pullParser = new PullParser();
         List<Worker> list = pullParser.pullParsers();

         for(Worker w:list)
         {
             System.out.println(w);
         }
     }

 }

Demo

 <?xml version="1.0" encoding="UTF-8"?>
 <workers>
     <worker id="AQ01">
         <name>Mark</name>
     </worker>
     <worker id="AD02">
         <name>Luch</name>
     </worker>
     <worker id="AD03">
         <name>Lily</name>
     </worker>
     <worker id="AD04">
         <name>Lily</name>
     </worker>
 </workers>

xml文件

 package com.qianfeng.pullparser2;

 public class Worker {

     private String id;
     private String name;

     public Worker() {
         super();
         // TODO Auto-generated constructor stub
     }
     public Worker(String id, String name) {
         super();
         this.id = id;
         this.name = name;

     }
     public String getId() {
         return id;
     }
     public void setId(String id) {
         this.id = id;
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }

     @Override
     public String toString() {
         return "Worker [id=" + id + ", name=" + name + "]";
     }
 }

Worker.class 对象类

解析效果:

 Worker [id=AQ01, name=Mark]
 Worker [id=AD02, name=Luch]
 Worker [id=AD03, name=Lily]
 Worker [id=AD04, name=Lily]

控制台信息

2、解析服务器的xml文件

 package pull;

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

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

 public class Pull {

     /**
      * @param args
      * @throws XmlPullParserException
      * @throws IOException
      */
     public static void main(String[] args) throws XmlPullParserException, IOException {
         // TODO Auto-generated method stub
         List<Person> list = null;
         Person person=null;

         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         XmlPullParser parser =  factory.newPullParser();
         String path ="http://localhost:8080/aaa/person.xml";
         InputStream in = HttpUtil.getInputStream(path);
         parser.setInput(in, "utf-8");
         int event = parser.getEventType();
         while(event!=XmlPullParser.END_DOCUMENT)
         {
             switch(event)
             {
             case XmlPullParser.START_DOCUMENT:
                 System.out.println("文件解析开始");
                 list = new ArrayList<Person>();
                 break;
             case XmlPullParser.START_TAG:
                 String str = parser.getName();
                 if("person".equals(str))
                 {
                     person = new Person();
                     int count = parser.getAttributeCount();
                     ;i<count;i++)
                     {
                         String key = parser.getAttributeName(i);
                         String value = parser.getAttributeValue(i);
                         if("id".equals(key))
                         {
                             person.setName(value);
                         }
                     }
                 }
                 else if("name".equals(str))
                 {
                     person.setName(parser.nextText());
                 }
                 break;
             case XmlPullParser.END_TAG:
                 if("person".equals(parser.getName()))
                 {
                     list.add(person);
                     person=null;
                 }
                 break;
             }
             event = parser.next();

         }

         ;i<list.size();i++)
         {
             System.out.println(list);
         }

     }

 }

对应的HttpUtil自定义类getInpustStream方法

 package pull;

 import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;

 public class HttpUtil {
     public static InputStream getInputStream(String path) throws IOException{
         URL url = new URL(path);
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
         conn.setRequestMethod("GET");
         conn.setConnectTimeout();
         conn.setDoInput(true);
         )
         {
             InputStream in = conn.getInputStream();
             return in;
         }

         return null;

     }

 }

HttpHtil.java

解析效果:

 文件解析开始
 [Pserson [id=, name=张老师, age=], Pserson [id=, name=李老师, age=]]
 [Pserson [id=, name=张老师, age=], Pserson [id=, name=李老师, age=]]

控制台信息

Java数据解析---PULL的更多相关文章

  1. Java数据解析---JSON

    一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...

  2. Java数据解析之JSON

    文章大纲 一.JSON介绍二.常见框架介绍与实战三.Studio中GsonFormat插件使用四.项目源码下载(含参考资料)五.参考文档   一.JSON介绍 1. 简介   JSON 的全称是 Ja ...

  3. Java数据解析之XML

    文章大纲 一.XML解析介绍二.Java中XML解析介绍三.XML解析实战四.项目源码下载   一.XML解析介绍   最基础的XML解析方式有DOM和SAX,DOM和SAX是与平台无关的官方解析方式 ...

  4. Java数据解析---SAX

    一.Sax解析 是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档. Sax采用事件驱动的方式解析文档.简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回 ...

  5. json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例

    json-lib-2.4-jdk15.jar所需全部JAR包.rar  java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar  ...

  6. android基础(五)网络数据解析方法

    在网络上传输数据时最常用的方法有两种:XML和JSON,下面就对这两种类型的数据解析进行讲解. 一.XML数据解析 在Android中,常见的XML解析器分别为SAX解析器.DOM解析器和PULL解析 ...

  7. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. 网络相关系列之四:数据解析之SAX方式解析XML数据

    一.XML和Json数据的引入: 通常情况下.每一个须要訪问网络的应用程序都会有一个自己的server.我们能够向server提交数据,也能够从server获取数据.只是这个时候就有一个问题,这些数据 ...

  9. 数据解析(XML和JSON数据结构)

    一   解析 二 XML数据结构 三 JSON 数据结构     一 解析 1  定义: 从事先规定好的格式中提取数据     解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照 ...

随机推荐

  1. 数据库 数据库SQL语句三

    转换函数 to_char()字符串转换日期函数 --查询大于某个日期的员工信息 select * from emp where hiredate>to_date('1980-02-12','yy ...

  2. eclipse启动时报错 Could not create the java virtual machine

    eclipse启动的时候 报错 这是系统为eclipse分配的内存不足,需要去修改  eclipse.ini文件 eclipse.ini是eclipse 内存分配之类的配置文件   对java虚拟机的 ...

  3. Android中的内存储、外存储概念、文件操作与PC端的有些不同

    其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.初学者在这部分感到很容易混 ...

  4. 8-Highcharts曲线图之对数直线图

    <!DOCTYPE> <html lang='en'> <head> <title>8-Highcharts曲线图之对数直线图</title> ...

  5. 【转】DNS记录类型介绍(A记录、MX记录、NS记录等)

    DNS A记录 NS记录 MX记录 CNAME记录 TXT记录 TTL值 PTR值 建站名词解释:DNS A记录 NS记录 MX记录 CNAME记录 TXT记录 TTL值 PTR值 泛域名 泛解析 域 ...

  6. php基础25:each()

    <?php /* 返回当前元素的键名和键值,并将内部指针向前移动: */ $people = array("Bill", "Steve", "M ...

  7. 【多线程】Java并发编程:Lock(转载)

    原文链接:http://www.cnblogs.com/dolphin0520/p/3923167.html Java并发编程:Lock 在上一篇文章中我们讲到了如何使用关键字synchronized ...

  8. 函数dirname--返回路径中的目录部分

    http://blog.chinaunix.net/uid-122937-id-142880.html dirname() 函数作用   返回路径中的目录部分. 语法   dirname(path) ...

  9. sublime Text3 新建文件时定义模块

    开发的过程中有很多的东西,不需要每次编写,如果每次编写这样会很蛋疼,所以sublime 提供了一个牛逼的插件SublimeTmpl, 这个插件可以定义自己新建的模块. sublimeTmpl 安装 1 ...

  10. hibernate中Query的list和iterator区别

    1.Test_query_list类 public class Test_query_iterator_list { public static void main(String[] args) { ...