zoukankan      html  css  js  c++  java
  • Java数据解析---PULL

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

    1、PULL解析

    2、SAX解析

    3、DOM解析

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

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

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

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

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

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

    1、解析本地xml文件

     1 public class PullParser {
     2     
     3     public List<Worker> pullParsers() throws XmlPullParserException, IOException
     4     {
     5         List<Worker> list = null;
     6         Worker worker = null;
     7         //第一步:创建XML解析对象,需要通过工厂模式创建类的实例
     8         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
     9         XmlPullParser parser = factory.newPullParser();
    10 //        第二步:设置待解析的xml数据源
    11         FileInputStream fis = new FileInputStream("worker.xml");
    12         parser.setInput(fis,"utf-8");
    13 //        第三步:获取当前xml标签的事件类型
    14         int event = parser.getEventType();
    15 //        第四步:通过分支语句处理不同的事件标签
    16         while(event!=XmlPullParser.END_DOCUMENT)
    17         {
    18             
    19             switch(event)
    20             {
    21 //            第五步:获取标签名称,处理标签信息
    22             case XmlPullParser.START_DOCUMENT://解析文件开始,创建列表集合对象
    23                 list = new ArrayList<Worker>();
    24                 break;
    25             case XmlPullParser.START_TAG:
    26                 String tagName = parser.getName();
    27                 if("worker".equals(tagName))
    28                 {
    29                     worker = new Worker();
    30                     int count = parser.getAttributeCount();//得到属性的个数
    31                     for(int i=0;i<count;i++)
    32                     {
    33                         String attrName = parser.getAttributeName(i);
    34                         String attrValue = parser.getAttributeValue(i);
    35                         if("id".equals(attrName))
    36                             worker.setId(attrValue);
    37                     }
    38                 }
    39                 else if("name".equals(tagName))
    40                     worker.setName(parser.nextText());
    41                     worker.setMoney(Double.parseDouble(parser.nextText()));
    42                 break;
    43                 
    44             case XmlPullParser.END_TAG://解析文件结束,
    45                  if("worker".equals(parser.getName()))
    46                  {
    47 //                第六步:将处理的数据保存到JavaBean或Map对象中
    48                      list.add(worker);
    49                      worker = null;
    50                  }
    51                  break;
    52             }
    53 //            第七步:获取下一个标签的事件类型,判断事件类型是否为文档结束事件,如果是则退出,反之重复第四、五、六步
    54             event = parser.next();
    55         }
    56         return list;
    57     }
    58 
    59     /**
    60      * @param args
    61      * @throws IOException 
    62      * @throws XmlPullParserException 
    63      */
    64     public static void main(String[] args) throws XmlPullParserException, IOException {
    65         PullParser  pullParser = new PullParser();
    66         List<Worker> list = pullParser.pullParsers();
    67         
    68         for(Worker w:list)
    69         {
    70             System.out.println(w);
    71         }
    72     }
    73 
    74 }
    Demo
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <workers>
     3     <worker id="AQ01">
     4         <name>Mark</name>
     5     </worker>
     6     <worker id="AD02">
     7         <name>Luch</name>
     8     </worker>
     9     <worker id="AD03">
    10         <name>Lily</name>
    11     </worker>
    12     <worker id="AD04">
    13         <name>Lily</name>
    14     </worker>
    15 </workers>
    xml文件
     1 package com.qianfeng.pullparser2;
     2 
     3 public class Worker {
     4     
     5     private String id;
     6     private String name;
     7 
     8     public Worker() {
     9         super();
    10         // TODO Auto-generated constructor stub
    11     }
    12     public Worker(String id, String name) {
    13         super();
    14         this.id = id;
    15         this.name = name;
    16 
    17     }
    18     public String getId() {
    19         return id;
    20     }
    21     public void setId(String id) {
    22         this.id = id;
    23     }
    24     public String getName() {
    25         return name;
    26     }
    27     public void setName(String name) {
    28         this.name = name;
    29     }
    30 
    31     @Override
    32     public String toString() {
    33         return "Worker [id=" + id + ", name=" + name + "]";
    34     }
    35 }
    Worker.class 对象类

    解析效果:

    1 Worker [id=AQ01, name=Mark]
    2 Worker [id=AD02, name=Luch]
    3 Worker [id=AD03, name=Lily]
    4 Worker [id=AD04, name=Lily]
    控制台信息

    2、解析服务器的xml文件

     1 package pull;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.ArrayList;
     6 import java.util.List;
     7 
     8 import org.xmlpull.v1.XmlPullParser;
     9 import org.xmlpull.v1.XmlPullParserException;
    10 import org.xmlpull.v1.XmlPullParserFactory;
    11 
    12 public class Pull {
    13 
    14     /**
    15      * @param args
    16      * @throws XmlPullParserException 
    17      * @throws IOException 
    18      */
    19     public static void main(String[] args) throws XmlPullParserException, IOException {
    20         // TODO Auto-generated method stub
    21         List<Person> list = null;
    22         Person person=null;
    23         
    24         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    25         XmlPullParser parser =  factory.newPullParser();
    26         String path ="http://localhost:8080/aaa/person.xml";
    27         InputStream in = HttpUtil.getInputStream(path);
    28         parser.setInput(in, "utf-8");
    29         int event = parser.getEventType();
    30         while(event!=XmlPullParser.END_DOCUMENT)
    31         {
    32             switch(event)
    33             {
    34             case XmlPullParser.START_DOCUMENT:
    35                 System.out.println("文件解析开始");
    36                 list = new ArrayList<Person>();
    37                 break;
    38             case XmlPullParser.START_TAG:
    39                 String str = parser.getName();
    40                 if("person".equals(str))
    41                 {
    42                     person = new Person();
    43                     int count = parser.getAttributeCount();
    44                     for(int i=0;i<count;i++)
    45                     {
    46                         String key = parser.getAttributeName(i);
    47                         String value = parser.getAttributeValue(i);
    48                         if("id".equals(key))
    49                         {
    50                             person.setName(value);
    51                         }
    52                     }
    53                 }
    54                 else if("name".equals(str))
    55                 {
    56                     person.setName(parser.nextText());
    57                 }
    58                 break;
    59             case XmlPullParser.END_TAG:
    60                 if("person".equals(parser.getName()))
    61                 {
    62                     list.add(person);
    63                     person=null;
    64                 }
    65                 break;
    66             }
    67             event = parser.next();
    68             
    69         }
    70         
    71         for(int i=0;i<list.size();i++)
    72         {
    73             System.out.println(list);
    74         }
    75         
    76         
    77     }
    78 
    79 }
    View Code

    对应的HttpUtil自定义类getInpustStream方法

     1 package pull;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.net.HttpURLConnection;
     6 import java.net.MalformedURLException;
     7 import java.net.URL;
     8 
     9 public class HttpUtil {
    10     public static InputStream getInputStream(String path) throws IOException{
    11         URL url = new URL(path);
    12         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    13         conn.setRequestMethod("GET");
    14         conn.setConnectTimeout(5000);
    15         conn.setDoInput(true);
    16         if(conn.getResponseCode() ==200)
    17         {
    18             InputStream in = conn.getInputStream();
    19             return in;
    20         }
    21         
    22         
    23         return null;
    24         
    25     }
    26 
    27 }
    HttpHtil.java

    解析效果:

    1 文件解析开始
    2 [Pserson [id=0, name=张老师, age=0], Pserson [id=0, name=李老师, age=0]]
    3 [Pserson [id=0, name=张老师, age=0], Pserson [id=0, name=李老师, age=0]]
    控制台信息
  • 相关阅读:
    十二周作业
    十一周作业
    第十周作业
    第九周作业
    第八周作业
    第七周作业
    2019年第六周作业
    第五周作业总结
    介绍自己
    第一学期总结
  • 原文地址:https://www.cnblogs.com/xqxacm/p/4758702.html
Copyright © 2011-2022 走看看