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
- XML的三种解析方式与JSON解析方式
- XML数据的三种解析(JSON方式 , DOM方式 , Sax方式)
- XML/JSON的几种解析方式
- Andorid解析json的三种方式
- JSON的三种解析方式
- JSON解析的三种方式
- Android---JSON的三种解析方式
- 解析JSON的三种方式
- JSON的三种解析方式
- Android:解析JSON的三种方式
- JSON的三种解析方式
- Json解析的三种方式
- Json解析的三种方式
- JSON解析的三种方式
- JSON的三种解析方式
- JSON 的三种解析方式
- JSON的三种解析方式
- XML解析的三种方式
- 如何解决 case expressions must be constant expressions
- Genymotion 无法安装应用解决
- Android-快速设置-Quick settings tile
- Generate Parentheses
- 基础类库:DateFormat、SimpleDateFormat类
- XML的三种解析方式与JSON解析方式
- Leetcode 111 Minimum Depth of Binary Tree
- 修改Nodejs内置的npm默认配置路径
- unused import statement解决方法
- java基础之异常
- apache多SSL证书虚拟主机使用mod_jk方式代理tomcat
- 函数指针数组的简单实现
- shell date命令
- RxJava初体验