XML的三种解析方式与JSON解析方式

来源:互联网 发布:淘宝店铺托管收费 编辑:程序博客网 时间:2024/06/10 12:00

XML的三种原生解析方式

DOM,SAX,PULL

DOM:内存消耗大 但是便于遍历.打开文档,将其转化为节点树,然后在其用循环的方式,遍历节点,一一查找.

SAX:速度快,战内存少.但是文件结构信息会丢失,采用的是流的处理方式.从起始标签开始一一往下逐个查找.起始标签与结尾标签作为标记来将一组数据存入一个集合中,想水流一样一直到最尾,然后最后返回集合,集合中就存下了所有的数据(这也应该就是所谓的流处理方式吧).

PULL:是Android内置,推荐的一种,相对来说有点类似SAX,也是从上往下,但是它还是已文档开始与结尾为条件,在其中间进行查找处理,然后分为不同标签开始逐一查找.

JSON:轻量级的数据交换格式,比XML小,解析速度快,而且方便,(大括号对象,中括号方法,冒号属性,直接解析,很简单粗暴啊),通过json文件,得到其中的JSON对象与数组,还有对象中的属性,对应的解析的时候json对象中的数据是已key-values的形式存在的,非常好理解.
以简单的PULL代码示例

PULLpackage com.example.again;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import com.example.again.bean.Book;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.util.Xml;import android.view.Menu;import android.view.MenuItem;public class PullXmlActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_pull_xml);        List<Book>list = pullXmlDate();        for (Book book : list) {            Log.e("--main--", "Pull"+book.toString());        }    }    private List<Book> pullXmlDate(){        List<Book>list = null;        InputStream inputStream = null;        try {            inputStream = getAssets().open("books.xml");            Book book = null;            //获取解析器            XmlPullParser parser = Xml.newPullParser();            //设置输入流和编码格式            parser.setInput(inputStream, "UTF-8");            //获取读取状态            int type = parser.getEventType();            //不等于文档结束            while(type != XmlPullParser.END_DOCUMENT){                switch (type) {                case XmlPullParser.START_DOCUMENT://文档开始                    list = new ArrayList<>();                    break;                case XmlPullParser.START_TAG://开始标签                    switch (parser.getName()) {                        case "book":                            book = new Book();                            //获取属性值 参数代表属性下标                            book.setDescription(parser.getAttributeName(0));                        break;                        case "id":    book.setId(Integer.valueOf(parser.nextText()));                        break;                        case "name":    book.setName(parser.nextText());                        break;                        case "price":    book.setPrice(Double.valueOf(parser.nextText()));                        break;                      default:                        break;                    }                    break;                case XmlPullParser.END_TAG://标签结束                    if(parser.getName().equals("book")){                        list.add(book);                    }                default:                    break;                }                //把当前状态返回给type                type = parser.next();            }        } catch (Exception e) {            e.printStackTrace();        }finally {            try {                if(inputStream!=null){                inputStream.close();                inputStream = null;                }            } catch (IOException e) {                e.printStackTrace();            }        }        return list;    }}book:package com.example.again.bean;/** * @author zq * */public class Book {    private String description;    private int id;    private String name;    private double price;    public String getDescription() {        return description;    }    public void setDescription(String description) {        this.description = description;    }    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 double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    @Override    public String toString() {        return "Book [description=" + description + ", id=" + id + ", name=" + name + ", price=" + price                +   "]";    }}BOOK.xml:<?xml version="1.0" encoding="utf-8"?><books>    <book description="是基础中的基础,必须牢固掌握">        <id>1001</id>        <name>Java基础教程</name>        <price>80.00</price>    </book>    <book description="学好Android第一步">        <id>1002</id>        <name>Android基础教程</name>        <price>90.00</price>    </book>    <book description="走向高级程序员必经之路">        <id>1003</id>        <name>Android高级教程</name>        <price>100.00</price>    </book></books>
0 0
原创粉丝点击