Android解析

SAX解析

特点:

占用内存少,解析速度快

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

1 解析类AtomParser extends DefaultHandler

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

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

endElement(String 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<Person> 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<Person>();
      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<Person> 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<numberList.length(); i++)
  //因为数组中的类型为int,所以为getInt,其他getString,getLong同用
    System.out.println(numberList.getInt(i));
}

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

解析方法:

//嵌套数组遍历
JSONObject demoJson = new JSONObject(jsonString);
JSONArray numberList = demoJson.getJSONArray("number");
for(int i=0; i<numberList.length(); i++){
      //获取数组中的数组
      System.out.println(numberList.getJSONArray(i).getInt(0));
}
时间: 2024-10-13 04:02:48

Android解析的相关文章

Android解析Json速度最快的库:json-smart

场景描写叙述: 本文仅验证了在安卓环境下使用Json的Key作为反序列化条件的解析速度.结论是解析速度最快的不是阿里的fastjson,也不是Google的Gson,而是json-smart. Android 4.4.2 fastjson-1.1.34.android.jar gson-2.2.4.jar json-smart-2.0-RC3.jar **注意场景的限定条件** 核心代码: package com.h3c.mytestview; import java.io.StringRead

android解析XML总结-SAX、Pull、Dom三种方式

在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析xml的这三种方式进行一次总结. xml示例(channels.xml)如下: <?xml version="1.0" encoding="utf-8"?> <channel> <item id="0&q

Java解析YAML和Android解析YAML

一.Java解析YAML 1. API的选择 一般分两种:Jyaml和snakeYAML.(Jyaml下载地址:http://download.csdn.net/detail/dgssfgfs/8477109) 2.Jar包的导入 这个不用说了,不会自己百度. 3.yaml的解析 …… import org.ho.yaml.Yaml; …… File f = new File("y.yaml"); FileInputStream fi=new FileInputStream(f.get

Android 解析 Android 项目组成

本文说明 Android 项目组成,虽然简单,但决不能忽视. 当你从简单 Hello World 程序,到会实现一些常见功能,比如,下拉(上拉)刷新最新(加载更多),消息处理(UI 通知更新),ViewPager 滑动效果,启动动画,访问网络文件,进行一些复杂的布局等等,在到调试一些开源项目,最后自己编写 Android 程序.可当调试一些开源项目时,尤其是那些比较大的开源项目,你会发现一些"意想不到"的情况,它们无论从界面,还是从功能,界面够炫,功能强大,也正因为如此,需要更多的资源

Android -- 解析xml

简单布局                                                                                      <TextView android:id="@+id/tv_weather" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_cente

详解android解析Xml的三种方式——DOM、SAX以及XMLpull

今天学习了android解析Xml的三种方式——DOM.SAX以及XMLpull,这里对它们进行总结. 如果理解有误,欢迎指正   ^_* 一.DOM方式解析: xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据.这个写起来很简单,但是很消耗内存.要是数据过大,手机不够牛逼,可能手机直接死机. 常用的DoM接口和类: Document:该接口定义分析并创建DOM文档的一系列方法,它是文档树的根,是操作DOM的基础.Element:该接口继承Node接口,提供了获

Android解析获取网络上的图片(支持bmp格式)

Android学习系列 - 显示网络上的图片(支持bmp格式)) 见如下代码: /** * 到Url地址上去下载图片,并回传Bitmap回來 * * @param imgUrl * @return */ public static Bitmap getBitmapFromUrl(String imgUrl) { URL url; Bitmap bitmap = null; try { url = new URL(imgUrl); InputStream is = url.openConnecti

(五十七)android解析XML总结(SAX、Pull、Dom三种方式)

一.SAX.DOM.PULL的比较 SAX.DOM.PULL各有自己的特点,具体操作XML的时候该如何选择呢? 1.内存占用 这是一个根本性问题.由于Android手机性能相对于现在的应用操作还是有限的,程序对内存的占用直接影响到了解析XML的速度.在这点上,SAX.Pull以它们比DOM占用更少的内存的解析方式,更适合于Android手机开发. 2.编程方式 SAX采用事件驱动,在相应事件触发的时候,会调用用户编写好的方法.也就是说,每解析一类XML,就要编写一个新的适合该类XML的处理类.这

android解析JSON

一.解析JSON数据: 首先引入包import org.json.JSONObject;(android sdk 14以后应该自带了 ) JSON数据如:String strJson = {"sid":"2","name":"张三"}; Android端的程序处理解析: JSONObject userJObject = new JSONObject(strJson ); String name = userObject.get

Android解析XML文档的两种方式的简单对比

Android之所以会用到解析XML文档,不仅与JAVA对XML的解析比较简单,而且还因为XML是Android在网络间传递信息的主要存储方式.下面我简单谈谈Android对XML文档解析的两种方式:dom和sax.dom解析方式是,解析方法将一个XML文件看成是一棵树.由数据结构的知识我们知道对树的处理比较简单,就是对树的节点进行增,删,改,查,这也是dom的一个最大优点.但是,dom方式在解析的时候是一次性就将整个XML文档读进内存,这坏处不用我说了吧,我宝贵的内存是禁不起这么折腾的. sa