设为首页 加入收藏

TOP

Android入门开发之SAX
2014-11-24 07:23:46 来源: 作者: 【 】 浏览:1
Tags:Android 入门 开发 SAX

一. SAX简介


SAX, Simple API for XML, 是一个解析速度快并且占用内存少的XML解析器,适合于移动平台。 它同时既是一种接口,也是指一个软件包。 作为接口,SAX是事件驱动型XML解析的一个标准接口, 也就是说它不需要解析完整个文档,采用相应的事件触发来进行回调处理。


二 . SAX的原理


SAX的工作原理,简单说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束,元素(element)开始与结束,文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直到文档结束。


大多数SAX实现都会产生以下类型的事件:


1. 在文档的开始和结束时触发文档处理事件。


2. 在文档内每一XML元素接受解析的前后触发元素事件


3. 任何元数据通常都由单独的事件交付。


4. 在处理文档的DTD或者Schema时产生DTD或者Schema事件。


5. 产生错误事件用来通知主机,应用程序解析错误。


SAX在解析文档的过程中会产生如下一系列的事件:


1. 创建事件处理程序


2. 创建SAX解析器


3. 将事件处理程序分配给解析器


4. 对文档进行解析,将每个事件发送给处理程序


三. ContentHandler接口


ContentHandler是Java类包中一个特殊的SAX接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束,元素开头和结束,以及元素中的字符数据等事件。 当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。 其接口方法有以下几种:


void startDocument();


void endDocument();


void startElement(....);


void endElement(....);


void charaters(); //解析中间元素时调用


四. SAX使用示例


String strXml = ""; // 这里获取到XML文件的具体内容字符串


//必须使用try catch, 否则编译器报错
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader reader = factory.newSAXParser().getXMLReader(); //XML解析读取类
reader.setContentHandler(new MyContentHandler()); //设置解析的ContentHandler
reader.parse(new InputSource(new StringReader(strXml)));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}


public class MyContentHandler extends DefaultHandler //继承于DefaultHandler
{
@Override
public void startDocument() throws SAXException { //开始解析xml文件
// TODO Auto-generated method stub
super.startDocument();

Log.v("XML", "startDocument");
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException { //开始解析元素
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);

Log.v("XML", "startElement");
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);

Log.v("XML", "characters");
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);

Log.v("XML", "endElement");
}

@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();

Log.v("XML", "endDocument");
}




}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android入门开发之 Handler使用 下一篇Android入门开发之SD卡读写操作

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)
·有没有Java swing教 (2025-12-25 15:19:09)
·Start, Stop, and Di (2025-12-25 14:50:57)
·C语言入门教程:零基 (2025-12-25 14:50:54)