`

xml,sax解析

 
阅读更多

简单描述不同解析方式的优缺点.

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解析

    在XMLDOMDemo这个示例中,可能包含了使用Java的DOM解析器与SAX解析器对比的代码,以及如何通过SAX解析XML文档的具体实现。DOM解析器如`javax.xml.parsers.DocumentBuilderFactory`和`javax.xml.parsers....

    xml sax解析

    SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式处理XML文档,相较于DOM(Document Object Model)解析器,SAX解析更加轻量级和高效。 SAX解析的核心思想是读取XML文档时,每当遇到一个元素、...

    xmlSAX 解析

    java xmlSAX 解析,简单易使用。

    sax解析xml文件

    相较于DOM(Document Object Model)解析器,SAX解析器占用更少的内存和处理时间,因为它不会一次性加载整个XML文档到内存,而是采用事件驱动的方式逐个处理XML元素。在本项目中,"saxloadxml"应该是实现了一个SAX...

    Sax解析XML文件解析

    SAX解析器以流式的方式读取XML文档,当遇到文档的各个元素时,会触发相应的事件,如开始文档、开始元素、结束元素、字符数据等。程序员通过实现SAX解析器的回调接口来处理这些事件,从而解析XML内容。这种方式使得...

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    android----xml Sax解析示例

    SAX解析的基本原理是,当解析器读取XML文档时,遇到每个元素、属性或其他XML结构,都会触发一个特定的事件,开发者可以通过实现SAX解析器的事件接口来响应这些事件。这种方式对比DOM解析(将整个XML文档加载到内存中...

    Java SAX解析Xml文档Demo

    本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...

    Sax解析xml文件

    SAX解析器的工作原理是基于事件驱动的,它在解析XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素等。开发者通过实现SAX解析器的回调接口(如ContentHandler),在这些事件发生时执行相应的...

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析器的使用,并且提到了使用JDOM和JOM4J这两个Java库来处理XML。 1. **DOM解析**:DOM是一种树型结构,它将整个XML文档加载到内存中...

    XML解析之SAX解析DEMO

    SAX解析是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取,当遇到XML文档中的特定事件(如开始元素、结束元素、字符数据等)时,会触发相应的回调函数。这种解析方式适用于处理大型...

    Servlet利用SAX解析XML文档

    本主题将深入探讨如何在Servlet中利用SAX解析XML文档。 首先,我们需要了解SAX解析的基本原理。SAX解析器不创建整个XML文档树,而是当遇到XML文档的各个部分(如元素、属性、文本等)时,触发相应的事件回调函数。...

    java解析xml数据---sax解析器

    SAX解析的基本工作原理是通过事件处理器(如ContentHandler、EntityResolver等)来接收XML文档的解析事件,如开始文档、结束文档、开始元素、结束元素、字符数据等。当解析器遇到这些事件时,会调用相应的处理器方法...

    sax解析xml尤其是获取元素的值或者内容

    本文将深入探讨如何使用SAX解析XML并获取元素的值或内容。 首先,SAX解析器以流式方式读取XML文档,当遇到文档的不同部分时,会触发相应的事件,如开始文档、开始元素、结束元素等。开发者可以注册事件处理器来响应...

    XML通过sax解析JSON格式

    标题中提到的"XML通过SAX解析为JSON格式"是指使用SAX解析器来读取XML文档,并将其转换成等效的JSON对象。SAX解析器以流式方式处理XML,当遇到文档的不同部分(如开始标签、结束标签、文本节点等)时,会触发相应的...

    SAX解析超大XML文件 示例代码

    SAX解析器逐行读取XML文件,只在需要时处理数据,显著降低了内存需求。 SAX解析的核心在于事件驱动模型。当解析器读取XML文件时,遇到开始元素、结束元素、字符数据等,它会触发相应的事件,并调用预先注册的处理器...

    dom解析和sax解析

    相比之下,SAX解析采用了事件驱动的方式,它不是将整个XML文档加载到内存中,而是逐行扫描XML文件,遇到元素开始、结束、属性等事件时触发相应的回调函数。例如,对于上述XML,SAX解析器会依次调用startElement、...

    sax解析xml本地读取xml

    SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式对XML文档进行解析,而不是一次性加载整个文档到内存中,因此在处理大型XML文件时,SAX解析器具有较高的性能和较低的内存消耗。 标题“sax解析...

    android使用SAX解析xml

    本篇文章将详细介绍如何在Android环境中使用SAX解析器来处理从网络获取的XML文件。 1. **XML与SAX解析基础** - XML是一种结构化的文本数据表示方式,它定义了标签、属性等规则,使数据具有自解释性。 - SAX解析器...

Global site tag (gtag.js) - Google Analytics