在Android中解析XML文主要有三种方式,分别为Simple API for XML(SAX)、Document Object Model(DOM)和Android附带的pull解析器。在本篇文章中主要采用例子说明使用SAX方式解析XML文件。
SAX是一个解析速度非常快并且占用内存少的XML解析器,非常适合Android等移动设备。SAX解析XML文件采用事件驱动的方式进行,也就是说SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序。
SAX的优势在于其解析速度较快,占用内存较少(相对于DOM而言)。而且SAX在解析文件的过程中得到自己需要的信息后可以随时终止解析,并不一定要等文件全部解析完毕。
SAX的回调事件定义在ContentHandler接口中,下面是一些ContentHandler接口常用的方法:
startDocument()
当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。
endDocument()
和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。
startElement(String namespaceURI, String localName, String qName, Attributes atts)
当读到一个开始标签的时候,会触发这个方法。namespaceURI就是命名空间,localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。这使得SAX在编程处理上没有DOM来得那么方便。
endElement(String uri, String localName, String name)
这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。
characters(char[] ch, int start, int length)
这个方法用来处理在XML文件中读到的内容,第一个参数为文件的字符串内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。
我们先看下工程的目录结构如下:
按以下步骤进行操作:
[1] 新建一个XML文件,命名为student01.xml。同时把XML文件放置到assets目录下。student01.xml文件的内容如下:
[2] 根据XML文件中的节点目录,创建一个相对应的实体类,来保存解析的相应信息。在包:com.andyidea.entity下新建Student.java类。
[3] 创建了一个用来解析XML文件的类,该类继承自DefaultHandler。在包:com.andyidea.util创建XMLContentHandler.java类【注:DefaultHandler默认实现了ContentHandler接口】
[4] 定义一个使用SAX解析XML文件的工具类:ParserBySAX.java。在该类中我们定义了一个parseXML(InputStream input)方法,该方法接收一个输入流,并创建了SAX解析器工厂以及SAXParse的实例。
[5] 该Demo的入口类:MainActivity.java
[6]最后我们运行程序看看结果如下:
注:黑色方框中显示的内容就是解析XML的结果。
分享到:
相关推荐
以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...
本文将详细介绍如何在Android中使用SAX方式解析XML。 **SAX解析器的工作原理** SAX解析器读取XML文件时,遇到每个元素、属性、文本等都会触发相应的事件,开发者需要通过实现ContentHandler接口来处理这些事件。...
- `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
首先,让我们了解一下SAX解析XML的基本流程。当SAX解析器读取XML文件时,它会按照文档顺序触发一系列事件,这些事件对应于ContentHandler接口中定义的方法。以下是ContentHandler接口的一些关键方法: 1. `start...
本文将深入探讨如何在Android中使用两种常见的XML解析技术——SAX(Simple API for XML)和PULL(Pull Parser)来解析天气预报的XML数据。这两种方法各有优缺点,适用于不同的场景。 首先,我们来看SAX解析器。SAX...
以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...
首先,SAX解析是一种基于事件驱动的解析方式,它不需要一次性加载整个XML文档到内存中,而是逐行读取,当遇到特定的XML元素(如开始标签、结束标签、属性等)时,会触发相应的事件处理器。这种方式对内存消耗较小,...
Android中解析XML文件SAX方式 SAX解析器会触发一系列的事件,如开始文档、开始元素、结束元素等,开发者需要通过实现`DefaultHandler`或自定义的`ContentHandler`来处理这些事件。以下是一个基本的SAX解析器使用...
本篇文章将深入探讨三种在Android中解析XML的方法:DOM(文档对象模型)、Pull(拉取解析器)和SAX(简单API for XML),并且会特别强调如何识别文件编码。 首先,DOM解析是将整个XML文件加载到内存中形成一个树形...
### 四、初始化SAX解析器并解析XML文件 1. 创建`SAXParserFactory`实例,用于创建`SAXParser`。 2. 使用`SAXParser`创建`XMLReader`对象。 3. 将我们的事件处理器设置为`XMLReader`的ContentHandler。 4. 打开本地...
本文将详细介绍如何在Android中使用SAX解析XML。 首先,我们需要了解SAX解析的基本流程。SAX解析XML的过程是基于事件的,当解析器读取XML文档时,会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素等...
本篇将深入探讨如何使用Android中的SAX引擎解析XML文件。 首先,我们需要理解SAX解析的基本工作原理。SAX解析器在读取XML文件时,会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素等。开发者通过实现...
本教程将详细讲解如何在Android中使用SAX解析XML。 首先,要使用SAX解析XML,我们需要理解其工作原理。SAX解析器会逐个读取XML文档的元素,每当遇到文档的开始、结束、文本等事件时,就会触发相应的回调方法。...
本教程将详细介绍如何在Android项目中使用SAX解析XML文件。首先,我们需要添加SAX解析器的依赖。在Android Studio的build.gradle文件中,确保已经包含了对`org.xml.sax`的支持,这通常作为Android SDK的一部分默认...
总结起来,Android中使用SAX解析XML的优点在于其低内存占用和高效的性能,适合处理大型XML文档。通过创建自定义的ContentHandler并重写其方法,我们可以根据XML的结构来解析和处理数据。不过,SAX解析不适用于需要...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在移动应用开发,如Android中,解析XML文件是常见的任务。本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)...
### Android中使用SAX解析XML 1. **引入库**:在Android项目中,SAX解析器已经内置在`org.xml.sax`包中,无需额外导入库。 2. **创建ContentHandler**:创建一个实现了`org.xml.sax.ContentHandler`接口的类,重写...
本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...
总的来说,这个例子展示了如何在Android应用中使用SAX解析XML字符串的基本步骤。通过自定义的`ContentHandler`,我们可以根据XML结构处理数据,而不会因为XML文件大小而受到内存限制。这种方法特别适合资源有限的...