码迷,mamicode.com
首页 > 移动开发 > 详细

Android解析

时间:2015-01-28 21:07:45      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

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<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));
}

Android解析

标签:

原文地址:http://www.cnblogs.com/liyuejiao/p/4256991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!