SAX解析
来源:互联网 发布:nginx安装lua模块 编辑:程序博客网 时间:2024/04/29 07:48
优点:
不需要像dom解析那样在内存中建立一个dom对象,占用内存
sax解析是逐行解析的,每次读入内存的只是一行xml,所以速度快,效率高点。不过sax一般是处理固定格式的xml。
xml:
<?xml version="1.0" encoding="UTF-8"?><persons><person id="11"> <name>heje</name> <age>22</age> </person><person id ="22"> <name>heje</name> <age>22</age> </person> </persons>
对象模型:package com.example.zy;import android.R.integer;
public class Person { private Integer id; private String name; private Short age; public Person(){}; public Person(Integer id,String name,Short age){ this.id=id; this.name=name; this.age=age; }; public Person(String name,Short age){ this.name=name; this.age=age; }
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Short getAge() { return age; }
public void setAge(Short age) { this.age = age; }
@Override public String toString() { // TODO Auto-generated method stub return "id="+ id+ ",name="+ name+ ",age="+ age; };
}
处理事件源在解析过程中产生不同类的事件:
package com.example.zy;
import java.util.ArrayList;import java.util.List;
import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;
import android.R.integer;
public class SAX_handler extends DefaultHandler {
private static final String TAG = "SAX_handler"; private List<Person> persons; private String perTag;// 记录前一个标签
Person person;// 记录当前标签
public List<Person> getPersons() { return persons;
}
@Override public void characters(char[] ch, int start, int length) throws SAXException { String data = new String(ch, start, length).trim(); if (!"".equals(data.trim())) { } if ("name".equals(perTag)) { person.setName(data); } else if ("age".equals(perTag)) { person.setAge(new Short(data)); }
}
@Override public void endDocument() throws SAXException {
}
@Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("person".equals(localName)) { persons.add(person); person = null; } perTag = null;
}
// 初始化 @Override public void startDocument() throws SAXException { persons = new ArrayList<Person>(); }
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("person".equals(localName)) { for (int i = 0; i < attributes.getLength(); i++) { person = new Person(); person.setId(Integer.valueOf(attributes.getValue(i))); }
}
perTag = localName;
}
}
activity:
import java.io.IOException;import java.io.InputStream;import java.util.List;
import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;
import android.os.Bundle;import android.app.Activity;import android.widget.TextView;
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
TextView text = (TextView) findViewById(R.id.textaction); try { // 创建一个工厂对象 SAXParserFactory factory = SAXParserFactory.newInstance(); // 通过工厂对象得到一个解析器对象 SAXParser parser = factory.newSAXParser(); // 通过parser得到XMLReader对象 XMLReader reader = parser.getXMLReader(); // 为reader对象注册事件处理接口 SAX_handler handler = new SAX_handler(); reader.setContentHandler(handler); // 解析指定XML字符串对象 reader.parse(new InputSource(MainActivity.class.getClassLoader() .getResourceAsStream("wang.xml"))); List<Person> persons = handler.getPersons(); String usersInfo = ""; for (Person person : persons) { usersInfo += "ID->" + person.getId() + "\n"; usersInfo += "NAME->" + person.getName() + "\n"; usersInfo += "AGE->" + person.getAge() + "\n"; usersInfo += "\n\n";
} text.setText(usersInfo);
} catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
}
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX 解析
- sax解析
- SAX解析
- SAX解析
- SAX解析
- sax解析
- SAX解析
- SAX解析
- SAX解析
- sax解析
- 插入法单链表的逆序代码
- Android中的surfaceHolder.lockCanvas(null)返回为null详解
- Oracle中index by binary_integer的作用
- Delphi与WebService
- 网页设计如何表达出时尚感与健康感
- SAX解析
- COUNT STOPKEY 及分页方式比较
- 数组
- .Net之路(九).ashx来实现ajax用户名的验证
- MCC MNC 什么意思
- APP的状态判断
- error LNK2001: unresolved external symbol "protected: 类似问题的解决办法
- jqplot zoom event & change tickets format
- linux 的date命令及系统时间设置