SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。
SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器:
解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。
解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。
阅读ContentHandler API文档,常用方法:startElement、endElement、characters
Sax解析的流程:
1.使用SAXParserFactory创建SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
2.通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
3.通过解析器对象得到一个XML的读取器
XMLReader xmlReader = sp.getXMLReader();
4.设置读取器的事件处理器
xmlReader.setContentHandler(new BookParserHandler()); 其中BookParserHandler extends DefaultHandler
5.解析xml文件
xmlReader.parse("book.xml"); book.xml需放在工程下的src目录或者是:xmlReader.parse("D:\\test\\person.xml")
第二种方法是xmlReader.parse(InputStream);
通常我都是用读取输入流的方式(xmlReader.parse(InputStream))去解析 不管使用文件还是从网络上获取文件 终极都是转化为输入流读到内存中进行解析
同时还会把3-5步骤 会写在一起parse(InputStream is, DefaultHandler dh)
extends DefaultHandler 就是主要的编码工作 添加未实现的方法
首先设置一个标志boolean flag =true或者private String currentElement; 用来记住当前元素的名称 当保存文本节点后 将flag =false 或者currentElement=“”
1.public void characters(char[] ch, int start, int length)
throws SAXException {} 用来读取元素的下一个文本节点 如String content=new String(ch,start,length);
将读到的内容存到Person bean中
public void characters(char[] ch, int start, int length)
throws SAXException
{
String content=new String(ch,start,length);//元素的下一个文本节点
//读到 name age元素的时候 读取内容将其保存到bean中
if("name".equals(currentElement))
{
person.setName(content);
}else if("age".equals(currentElement))
{
person.setAge(new Short(content));
}
}
2.startElement开始元素事件
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
//当元素有属性值的时候就先属性值保存到 bean
if("person".equals(qName))
{
person=new Person();
person.setId(Integer.parseInt(attributes.getValue("id")));
}else if("name".equals(qName)||"age".equals(qName))
{
//保持当前元素名称
currentElement = qName;
}
}
3.endElement结束元素事件
public void endElement(String uri, String localName, String qName)
throws SAXException
{
if("person".equals(qName))
{
persons.add(person);
}else if("name".equals(qName)||"age".equals(qName))
{ //读到结束元素到时候将currentElement设置为null,以便读到下一个元素的时候可以记住
currentElement = "";
}
}
表达能力有限可以看我附件中说明 希望对各位有帮助
分享到:
相关推荐
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
使用sax解析从网络上获取的xml文件
android使用SAX解析XML
SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML 语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调...
android 使用sax解析XML,内含视频和源码已经说明文档。非常详细
NULL 博文链接:https://z251257144.iteye.com/blog/1356394
Android SAX 解析XML SAX 解析XML(通用)
Sax解析xml文件详细例子,解析复杂节点的xml,把内容显示到view中,例子简单完整,易用
Android之SAX解析
Android中SAX解析XML的demo
android 以SAX方式解析xml
android 使用 sax 去解析xml。
www.mars-droid.com/Android开发视频教程 代码 源码 mars老师讲课 android 视频源码 SAX解析XML xml 源码(在此特别感谢mars的无私奉献,此代码为跟随视频边学边做的)
android中用sax解析xml模板的demo源码,解压出来将解析类导入其他工程就可用了不必再写了.
27.使用SAX解析XML.rar 27.使用SAX解析XML.rar 27.使用SAX解析XML.rar android coolszy
android sax解析xml 完整的例子及说明,解压后就可以运行,相信你的选择
在Android中,使用SAX和PULL解析XML,本项目中以解析天气预报为例。 详情见博客:http://blog.csdn.net/yalin18/article/details/7437752
android SAX解析XML