博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android解析
阅读量:6073 次
发布时间:2019-06-20

本文共 3085 字,大约阅读时间需要 10 分钟。

SAX解析

特点:

占用内存少,解析速度快

采用事件启动,不需要解析整个文档。而是按照内容顺序 看文档某个部分是否符合xml语法,如果符合就触发相应的事件,所谓的事件就是些回调方法(callback,这些方法定义在ContentHandler

 

解析类AtomParser extends DefaultHandler

2 startDocument:当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作

  startElement: (String namespaceURI,String localName,String qName,Attributes atts)当遇开始标签的时候就会触发这个方法。

  endElementString uri,String localName,String name):当遇到结束标签时触发这个事件,调用此法可以做些善后工作。

  charachers(char [] ch,int start,int length):当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。

3 android.util.Xml.parse(xml内容, new AtomParser解析器);

 

DOM解析

整个XML文档独到内存中,树形结构,XML很大时不能用于手机

 

PULL解析 

使用PULL解析XML

SAX解析,性能和SAX一样。基于事件驱动。

产生的事件是一个数字,而非方法。

需要人为参与,调用API,才能解析相关元素(SAX自动调用)。

public List
parseXML(InputStream in) throws XmlPullParserException,IOException {  XmlPullParser parser = Xml.newPullParser();  parser.setInput(in, "UTF-8");  int eventType = parser.getEventType();  while (eventType != XmlPullParser.END_DOCUMENT) {    switch (eventType) {    case XmlPullParser.START_DOCUMENT:      // 初始化      persons = new ArrayList
();      break;    case XmlPullParser.START_TAG:      // 取开始节点中的属性和文本值      if ("person".equalsIgnoreCase(parser.getName())) {        person = new Person();        person.setId(parser.getAttributeValue(0));      } else if ("name".equalsIgnoreCase(parser.getName())) {        if (person != null) {          person.setName(parser.getText());        }      }      break;      case XmlPullParser.END_TAG:        if ("person".equalsIgnoreCase(parser.getName())) {          if (persons != null && person != null) {            persons.add(person);          }        }      break;    }    eventType = parser.next();// 进入下一个节点,触发相应事件  }  return persons;}
使用PULL生成XML
public void saveXML(List
persons, OutputStream os) throws IllegalArgumentException, IllegalStateException, IOException {  XmlSerializer serializer = Xml.newSerializer();  serializer.setOutput(os, "UTF-8");  serializer.startDocument("UTF-8", true);// 生成XML头  serializer.startTag("", "persons");  for (Person person : persons) {    serializer.startTag("", "person");   serializer.attribute("", "id", String.valueOf(person.getId()));    serializer.startTag("", "name");    serializer.text(person.getName());    serializer.endTag("", "name");    serializer.endTag("", "persons");  }  serializer.endTag("", "persons");  serializer.endDocument();  os.flush();  os.close(); }

json解析

JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信

(1).解析Object

{
"name":"android","version":"iphone"}
解析方法:
JSONObject demoJson = new JSONObject(jsonString); String name = demoJson.getString("name");String version = demoJson.getString("version");System.out.println("name:"+name+",version:"+version);

(2).解析Array

{
"number":[1,2,3]}

解析方法:

JSONObject demoJson = new JSONObject(jsonString);JSONArray numberList = demoJson.getJSONArray("number");for(int i=0; i
{
"number":[[1],[2],[3]]}
解析方法:
//嵌套数组遍历JSONObject demoJson = new JSONObject(jsonString);JSONArray numberList = demoJson.getJSONArray("number");for(int i=0; i

转载于:https://www.cnblogs.com/liyuejiao/p/4256991.html

你可能感兴趣的文章
IDEA使用(1)intellIJ idea 配置 svn
查看>>
WPF 降低.net framework到4.0
查看>>
数据管理DMS 全量SQL诊断:你的SQL是健康的蓝色,还是危险的红色?
查看>>
搭建一个通用的脚手架
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>
要想成为高级Java程序员需要具备哪些知识呢?
查看>>
带着问题去学习--Nginx配置解析(一)
查看>>
onix-文件系统
查看>>
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>
CSS3让长单词与URL地址自动换行——word-wrap属性
查看>>
CodeForces 580B Kefa and Company
查看>>