1.Sax方式:
SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在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)就可以获取内容。
只要为SAX提供实现ContentHandler接口的类,那么该类就可以得到通知事件(实际上就是SAX调用了该类中的回调方法)。因为ContentHandler是一个接口,在使用的时候可能会有些不方便,因此,SAX还为其制定了一个Helper类:DefaultHandler,它实现了这个接口,但是其所有的方法体都为空,在实现的时候,你只需要继承这个类,然后重载相应的方法即可。使用SAX解析itcast.xml的代码如下:
public static List<Person> readXML(InputStream inStream) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = spf.newSAXParser(); //创建解析器
//设置解析器的相关特性,http://xml.org/sax/features/namespaces = true 表示开启命名空间特性
saxParser.setProperty("http://xml.org/sax/features/namespaces",true);
XMLContentHandler handler = new XMLContentHandler();
saxParser.parse(inStream, handler);
inStream.close();
return handler.getPersons();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
SAX 支持已内置到JDK1.5中,你无需添加任何的jar文件。关于XMLContentHandler的代码实现请看本页下面备注。
分享到:
相关推荐
例如,可以创建一个XML文件(如21.XML),然后分别用SAX、DOM和PULL解析器进行解析,对比它们的实现方式和性能差异。在学习过程中,要注意处理XML的命名空间、属性、实体引用等问题,以及错误处理和异常捕获。 为了...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在移动应用开发,如Android中,解析XML文件是常见的任务。本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)...
- 数据量:大型XML文件适合SAX或Pull解析,小型文件则可以选择DOM。 - 性能:SAX和Pull解析器通常比DOM更快,因为它们不需加载整个文件到内存。 - 灵活性:DOM允许随机访问任何部分,而SAX和Pull是线性的,更适合按...
XML(eXtensible Markup ...总的来说,SAX和PULL解析适用于处理大型XML文件,节省内存,而DOM解析则提供了一种更直观的方式处理XML,但需要更多内存。根据具体的应用场景和需求,开发者可以选择合适的XML解析方法。
总结来说,SAX和Pull解析器适用于处理大文件或性能敏感的场景,而DOM4J更适合需要频繁查询和修改XML结构的情况。在实际开发中,应根据具体需求选择合适的XML解析方式。在Eclipse 4.8和Java 1.8环境下,这些解析器都...
无论是哪种解析方式,读取XML文件的基本步骤都包括打开文件、创建解析器对象、设置事件处理器(对于SAX和PULL),然后启动解析。在解析过程中,根据解析器的不同,处理相应的事件。 5. 写入XML文件: 写入XML文件...
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
SAX是一种事件驱动的解析方法,它逐行读取XML文档,当遇到元素、属性等结构时触发相应的事件回调。这种解析方式适用于大型XML文件,因为它不会一次性加载整个文档到内存中,而是按需解析,节省资源。在Android中,...
这种方式适用于处理大型XML文件,因为它不会一次性加载整个文档到内存中,而是按需解析。对于person类,使用SAX解析时,我们需要创建一个继承自DefaultHandler的类,重写其中的startElement、endElement和characters...
SAX是一种基于事件驱动的解析器,它读取XML文件时会触发一系列事件,如开始元素、结束元素等。开发者需要为这些事件编写回调函数。SAX解析器优点是内存占用低,适合处理大文件;缺点是需要编写较多的事件处理代码,...
与Pull解析器类似,SAX解析器在读取XML时不会一次性加载整个文档,而是逐行解析,触发相应的事件回调。这种方式同样适合处理大文件,但相比Pull解析,SAX的API更底层,需要开发者编写更多的事件处理代码,且没有内置...
在IT行业中,XML(eXtensible Markup Language)是一种用于数据交换的标准格式,广泛应用于Web服务、...而对于处理大型XML文件,SAX和StAX的低内存消耗特性更具优势。开发者可以根据项目需求选择合适的XML解析技术。
SAX解析器逐行读取XML文件,当遇到特定的标签时,会触发回调函数。这种方式非常适用于处理大型XML文件,因为它只占用少量内存。在Android中,可以使用`org.xml.sax`包下的类来实现SAX解析。`DomXmlOperate`中可能...
本篇文章将深入探讨三种在Android中解析XML的方法:DOM(文档对象模型)、Pull(拉取解析器)和SAX(简单API for XML),并且会特别强调如何识别文件编码。 首先,DOM解析是将整个XML文件加载到内存中形成一个树形...
1. 使用SAX或PULL解析XML,当遇到需要处理的元素时,将相关信息保存到内存或写入新的XML文件。 2. 在解析过程中,根据处理的事件生成相应的XML元素。如果是开始元素,就创建一个新的元素;如果是结束元素,就关闭...
对于快速读取XML文件,Android提供了`AssetManager`类来访问应用程序的资源文件,包括XML文件。通过`AssetManager.open()`方法,可以打开位于assets目录下的XML文件,然后创建输入流,进一步设置到解析器的输入源。 ...
DOM解析器适合小型XML文档,因为所有数据都存储在内存中,处理大型XML文件时可能面临性能问题。 程序示例(Java): ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; //.....
在处理XML文档时,有三种主要的解析方式:SAX(Simple API for XML)、PULL(Pull Parser)以及DOM(Document Object Model)。每种解析方式都有其特点和适用场景。 1. SAX解析: SAX(Simple API for XML)是一种...
- SAX适用于处理大型XML文件,内存效率高,但编程相对复杂,需要处理各种事件。 - JDOM提供了简单易用的API,适合小型到中型的XML文档,但内存占用较大。 - DOM提供了完整的文档结构,方便操作,但不适合处理大文件...
SAX(Simple API for XML)是一种事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取,只处理当前元素,适合处理大型XML文件。SAX解析的核心是`XMLReader`,它定义了处理XML文档的接口。以下是一...