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解析器读取XML文件时,它会按照文档顺序触发一系列事件,这些事件对应于ContentHandler接口中定义的方法。以下是ContentHandler接口的一些关键方法: 1. `start...
本教程将详细讲解如何在Android中使用SAX解析XML。 首先,要使用SAX解析XML,我们需要理解其工作原理。SAX解析器会逐个读取XML文档的元素,每当遇到文档的开始、结束、文本等事件时,就会触发相应的回调方法。...
下面我们将详细讨论如何在Android中使用SAX解析XML。 首先,我们需要了解SAX解析的基本原理。SAX解析器在读取XML文档时,会触发一系列的事件,如开始文档、开始元素、结束元素、字符数据等。开发者需要定义一个...
总结,SAX解析XML在Android开发中是一个实用且高效的解决方案,尤其适用于处理大型XML文件。通过创建自定义的事件处理器,可以灵活地解析和处理XML数据,满足各种业务需求。不过,需要注意的是,由于SAX是基于事件的...
- `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...
下面详细介绍Android中使用SAX解析XML的关键步骤和相关知识点: 1. 引入库:在Android项目中,SAX解析器已经内置于`org.xml.sax`包中,无需额外导入库。 2. 创建事件处理器:你需要创建一个类来实现`...
### Android中使用SAX解析XML 1. **引入库**:在Android项目中,SAX解析器已经内置在`org.xml.sax`包中,无需额外导入库。 2. **创建ContentHandler**:创建一个实现了`org.xml.sax.ContentHandler`接口的类,重写...
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
本文将详细介绍如何在Android中使用SAX解析XML。 首先,理解SAX解析的基本原理。SAX解析器在读取XML文档时,会触发一系列的事件,例如开始文档、结束文档、开始元素、结束元素等。开发者需要创建一个实现了`...
在Android中使用SAX解析XML,主要涉及以下几个关键步骤: 1. **创建ContentHandler**:ContentHandler是SAX解析的核心,它定义了一系列的回调方法,用于处理XML文档的各种事件。比如`startDocument()`会在解析开始...
通过以上内容,你应该对Android中使用SAX解析XML有了深入的理解。实践过程中,可以结合具体XML文件结构和业务需求,灵活运用SAX解析器进行数据处理。同时,了解和掌握错误处理机制,以应对可能出现的异常情况,是...
**在Android中使用SAX解析XML:** 1. 引入XML解析库:在Android项目中,通常已经包含了Apache的XML解析库,无需额外添加依赖。 2. 创建事件处理器:实现`DefaultHandler`,覆盖`startElement`、`endElement`和`...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于Android开发中,用于存储配置、数据交换等。...通过学习和实践,你可以掌握在Android中使用SAX解析XML的技能,提升数据处理的能力。
本教程将详细讲解如何在Android中使用SAX解析XML。 SAX解析器是事件驱动的,它逐行读取XML文档,当遇到特定的元素、属性或事件时,会触发相应的回调函数。这种方式避免了整个XML文档加载到内存中,因此对于大型XML...
以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...
以下我们将逐步讲解如何在Android中使用SAX解析XML文件。 首先,我们需要创建一个`DefaultHandler`的子类,这个类是SAX解析过程中的事件处理器。在这个子类中,我们需要重写几个关键的方法,如`startElement`、`...
本文将深入讲解如何在Android中使用SAX解析XML以及如何通过SAX方式创建XML。 **1. SAX解析XML** SAX解析XML的基本流程是:创建SAXParserFactory,通过该工厂实例化SAXParser,然后设置事件处理器(ContentHandler...
在Android中,我们可以使用`DefaultHandler`作为SAX解析器的基类,创建一个继承自`DefaultHandler`的自定义处理器类,然后重写其中的方法,如`startElement`、`endElement`和`characters`,来处理XML中的元素和内容...