简单描述不同解析方式的优缺点.
XML是常用的一种存储数据的方式,在Android平台内部很多地方使用了XMl存储,比如轻量级的SharedPreference类的存储,其保存在Data/data[package name]/db.
android中解析xml有三种,分别是dom,sax,pull,3种解析方式各有所长所短,一般在pc上开发使用dom相对较为轻松些,但对于一些敏感的数库或者手机上还是主要采用sax方式,sax读取是单向的,优点,不占用内存空间,解析属性方便,缺点就是对于嵌套多个分支来说处理不是很方便,而dom方式会把整个xml文件加载到内存中,这里要提醒大家,该方法在查找方面可以喝Xpath很好的结合,如果数据量不是很大推荐使用,而pull在常常使用在J2Me中,对于节点处理比较好,类似sax方式,同样很节省内存,在j2me中经常使用的Kxml库来解析,
一下说说sax解析和pull解析,android中部推荐使用dom
sax解析
SAX是Simple API for XMl的缩写,吧是W3c官方所提出的标准,它是一种轻量型的方法,是比较安全的,android中提供了一种传统的sax使用方法,以及一个便捷的sax包装器,采用基于事件驱动的处理方式,它将xml文档转换成一系列的事件,由单独事件处理器来决定如何处理.
开始解析,startDocument, 结束解析,endDocument...
示例演示,首先创建一个简单的服务器,此处通过servlet创建一个返回的Xml的web服务器,sax作为解析的对象.
public class Person{
private String id;
private String name;
private String age;
private String address;
--------------get和set------------省去-----------
}
public Class SAXXmlService extends DefaultHandler{
//定义一个person引用
Person person = null;
//此处将xml里的数据封装成Person类,personList用于装解析后的数据
ArrayList<Person> personArr = null;
//定义一个标记变量,用于标记当前的xml被解析到哪个标签
private String currentTag = null;
//执行解析
public static ArrayList<Person> getPersonInfos(String queryString) throws Exception{
//得到sax解析工厂
SAXParserFactory factory =SAXParserFactory.newInstance();
//创建解析器
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
//得到流
URL url = new URL(queryString);
inputSource is = new InputSource(url.openStream);
//得到sax解析实体类
SAXXmlService handler = new SAXXmlService();
xmlreader.serCOntentHandler(handler);
//开始解析
xmlreader.parse(is);
return handler.personArr;
}
// 重写characters(char [] ch , int start , int length)throws SAXException{
//判断当前标签是否有效
if(currentTag != null){
//读取标签里面的内容
String value = new String(ch, start ,length);
//如果是Id标签,则读取 Id标签的内容设置到Person ID上,
if("id".equalsIgnoreCase(currentTag)){
person.setId(value);
}else if("name".equalseIgnoreCase(currentTag)){
person.setName(value);
}else if("age".equalasIg....)
.........
person.setAddress(value);
}
}
//解析xml时,读取到结束一个标签时,
重写endElement(String uri , String localName, String qName) throws SAXException{
//将当前标签设置为空
currentTag = null;
//如果结束标签是person的话,代表一个person对象已经读取完毕,将其添加到list后置空.
if(localName.equals("person")){
personArr.add(person);
person = null;
}
}
//解析xml时,当开始读取xml文档时
重写startDocument() throws SAXException{
super.startDocument();
personArr = new ArrayList<Person>();
}
//解析xml,当读取到一个元素标签开始时,
重写startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{
super.startElement(uri,localName,qName,attributes);
if(localName.equalas("person")){
person = new Person();
}
currentTag = localName;
}
}
此篇不好意思,由于时间关系只写了sax解析,此代码是由本人手写的,若赋值运行报错不好意思哈, 若是初学者希望能够理解characters(char [] ch, int start, int length)方法的重写和维护.
那么显示到手机上怎么看呢 ?
接下来就简单不过啦, 不过要仔细看哦...
-------部分代码省略---------------
saxActivity extends Activity{
//所有人员信息
public static ArrayList<Person> objs = null ;
static final String queryString ="http:// ...../servlet"; //路径
重写OnCreate(Bundler savedInstanceState){
------------获取控件Id代码省略---看自己喜欢什么样的TextView布局了----------
StringBuffer sb = new StringBuffer();
try{
//调用解析Xml服务
objs = SAXXMlService.getPersonInfos(queryString);
if(objs != nulll && objs.size() > 0){
//循环组装字符窜
for(Person p :objs){
sb.append("编号:") + p.getId()+"\n";
sb.append("姓名") + p.getName() +"\n";
--------------年龄, ------------地址 -----------
}
}
//这个时候就可以显示到布局的页面上了
如: textview.setText(sb.toString());
}catch(Exception e){
e.printStackTrace();
}
}
}
最后在来补充下吧,sax读取xml文档的方法, 占用内存比较少,但是开发流程相比dom就复杂多了,具体采用哪种方法比较合适,大家可以再开发的工程中来体会她们的差别.
请大家在给我点时间, 我会尽快把pull解析分享给大家.
分享到:
相关推荐
xml sax解析
xml
java xmlSAX 解析,简单易使用。
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
绝对可用的SAX解析XML文件项目,费了九牛二虎之力,才找到的好资源,特与大家共享出来。直接导入eclipse就可运行,无需任何配置。
Sax解析XML文件解
本代码是我对博客的xml解析----------Sax解析的代码重写了,一份,给需要的朋友,做参考。
Android SAX 解析XML SAX 解析XML(通用)
Java SAX解析Xml Demo(详细注释)
XML解析之SAX解析DEMO,之前在播控上有介绍,但是代码排版太乱了,这个就是Android4.0网络编程中的SAX解析例子。
Sax解析xml文件详细例子,解析复杂节点的xml,把内容显示到view中,例子简单完整,易用
SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码
java学习笔记——使用DOM解析XML和使用SAX解析XML
Servlet利用SAX解析XML文档,JAX,JSWDP,Servlet利用SAX解析XML文档
XML通过SAX解析为JSON格式的文档 例子中的类稍微修改可以做做到公用
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
使用java语言对XML文档进行解析的示例,包括DOM,SAX方式,并包括使用jdom和jom4j框架进行XML解析或生成XML文档
sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点
Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...
sax解析xml本地读取xml,希望对你有用