`
bearjava
  • 浏览: 82288 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

XML解析之SAX

    博客分类:
  • Java
XML 
阅读更多
SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。常见的事件处理器有三种基本类型:
  • 用于访问XML DTD内容的DTDHandler;
  • 用于低级访问解析错误的ErrorHandler;
  • 用于访问文档内容的ContentHandler,这也是最普遍使用的事件处理器。
与DOM相比,SAX解析器能提供更好的性能优势,它提供对XML文档内容的有效低级访问。SAX模型最大的优点是内存消耗小,因为整个文档无需一次加载到内存中,这使SAX解析器可以解析大于系统内存的文档。另外,你无需像在DOM中那样为所有节点创建对象。最后,SAX“推”模型可用于广播环境,能够同时注册多个ContentHandler,并行接收事件,而不是在一个管道中一个接一个地进行处理。

SAX的缺点是你必须实现多个事件处理程序以便能够处理所有到来的事件,同时你还必须在应用程序代码中维护这个事件状态,因为SAX解析器不能交流元信息,如DOM的父/子支持,所以你必须跟踪解析器处在文档层次的哪个位置。如此一来,你的文档越复杂,你的应用逻辑就越复杂。虽然没有必要一次将整个文档加载到内存中,但SAX解析器仍然需要解析整个文档,这点和DOM一样。

也许SAX面临的最大问题是它没有内置如XPath所提供的那些导航支持。再加上它的单遍解析,使它不能支持随机访问。这一限制也表现在名字空间上: 对有继承名字空间的元素不做注解。这些限制使SAX很少被用于操作或修改文档。

那些只需要单遍读取内容的应用程序可以从SAX解析中大大受益。很多B2B和EAI应用程序将XML用做封装格式,接收端用这种格式简单地接收所有数据。这就是SAX明显优于DOM的地方:因高效而获得高吞吐率。在SAX 2.0 中有一个内置的过滤机制,可以很轻松地输出一个文档子集或进行简单的文档转换。
public class SAXParse {

	public static void main(String[] args) {
		try {
			SAXParserFactory sf = SAXParserFactory.newInstance();
			SAXParser sp = sf.newSAXParser();
			DefaultHandler mySAXHandler = null;
			mySAXHandler = new MySAXHandler();
			sp.parse(new InputSource("user.xml"), mySAXHandler);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

class MySAXHandler extends DefaultHandler {
	
    boolean hasAttribute=false;
    Attributes attributes=null;

    public void startDocument() throws SAXException {
 	   System.out.println("*******Start parsing document******");
    }

    public void endDocument() throws SAXException {
 	   System.out.println("*******End parsing document*******");
    }

    public void startElement(String uri, String localName, String qName,
                  Attributes attributes) throws SAXException {
           if(qName.equals("users")){
                  return;
           }
           if(qName.equals("user")){
                  System.out.print(attributes.getQName(0)+ " = "+attributes.getValue(0));
           }
           if(attributes.getLength()>0){
                  this.attributes=attributes;
                  this.hasAttribute=true;
           }
    }

    public void endElement(String uri, String localName, String qName)
                  throws SAXException {
           if(hasAttribute&&(attributes!=null)){
                  for(int i=0;i<attributes.getLength();i++){
                         System.out.print(attributes.getQName(0)+attributes.getValue(0));
                  }
           }
    }

    public void characters(char[] ch, int start, int length)
                  throws SAXException {
           System.out.print(new String(ch,start,length));
    }
}



分享到:
评论

相关推荐

    XML解析之SAX解析DEMO

    本文将深入探讨XML解析中的SAX(Simple API for XML)解析方法,并结合一个具体的Android 4.0网络编程示例进行详细讲解。 SAX解析是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取...

    Android XML解析之SAX解析

    在Android中,有多种解析XML的方法,如DOM、SAX和Pull解析器。本篇主要讨论的是SAX解析,这是一种基于事件驱动的、高效的解析方式,适合处理大体积的XML文件。 SAX解析器逐行读取XML文档,当遇到开始标签、结束标签...

    Android XML解析之SAX方式

    在Android开发中,处理XML数据有多种方式,包括SAX(Simple API for XML)、DOM(Document Object Model)和PULL解析器。本篇文章将重点讨论SAX解析器,一种事件驱动的解析模型,它以流式处理XML文档,具有内存占用...

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    Sax解析XML文件解析

    SAX(Simple API for XML)是XML解析的一种方法,它以事件驱动的方式处理XML文档,非常适合处理大体积的XML文件,因为它不需要一次性加载整个文件到内存,而是逐行读取,因此节省了资源。 **SAX解析XML的基本原理:...

    Android XML解析——Sax解析XML

    XML解析是将XML文档转换为应用程序可以处理的数据的过程。本篇文章将重点讨论Android中的SAX(Simple API for XML)解析器,这是一种事件驱动的解析方法,适合处理大文件或内存有限的设备。 ### SAX解析原理 SAX...

    使用DOM解析XML和使用SAX解析XML

    DOM和SAX是两种常用的XML解析技术,它们在处理XML文档时各有特点和适用场景。 DOM(文档对象模型)解析XML文档是通过构建一个树形结构,将整个XML文档加载到内存中,形成一个节点层次。W3C官方推荐了DOM,使其成为...

    xml解析文件sax解析

    虽然SAX(Simple API for XML)解析器是解析XML十分方便的工具,但开发和维护SAX解析器是十分困难的,本文会告诉你如何使用XML Schemas中的信息来生成一个SAX解析器的框架源码,并且完成解析xml的技术

    Java SAX解析Xml文档Demo

    Java SAX(Simple API for XML)解析器是一种基于事件驱动的XML解析方式,它不将整个XML文档加载到内存中,而是逐行读取,当遇到某个事件(如开始标签、结束标签等)时,会触发相应的事件处理器方法。这种方式节省了...

    android xml文件解析 SAX

    SAX是一种事件驱动的XML解析器,它不会像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,遇到每个元素或属性时触发相应的事件回调。这种方式节省了内存,特别适合处理大型XML文件。 1. **SAX解析的基本...

    xml文件解析SAX

    SAX(Simple API for XML)是XML解析的一种方式,它以事件驱动的方式处理XML文档,适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存中。 在SAX解析中,XML文档被读取一次,遇到特定的元素、属性或其他...

    sax解析xml文件

    SAX(Simple API for XML)是一种轻量级的XML解析技术,主要用于读取XML文档。相较于DOM(Document Object Model)解析器,SAX解析器占用更少的内存和处理时间,因为它不会一次性加载整个XML文档到内存,而是采用...

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    - 演示如何配置和实现SAX事件处理器,处理XML解析过程中的各种事件,如开始元素、结束元素、字符数据等。 - 可能还包括对比DOM和SAX解析的性能测试,以及在不同场景下选择哪种解析方式的建议。 通过学习这些示例,...

    sax解析xml本地读取xml

    SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式对XML文档进行解析,而不是一次性加载整个文档到内存中,因此在处理大型XML文件时,SAX解析器具有较高的性能和较低的内存消耗。 标题“sax解析...

    dom解析和sax解析

    DOM解析是一种基于树型结构的XML解析方法。当一个XML文档被DOM解析器加载时,整个文档会被转化为一棵内存中的对象树,称为DOM树。每个XML元素、属性、文本节点等都被映射为树中的一个对象。例如,给定的XML示例: `...

    易语言 xml解析 易语言 xml解析 教程 带源码

    易语言XML解析是编程领域中的一个重要主题,尤其对于使用易语言进行开发的程序员来说,理解并掌握XML(可扩展标记语言)的解析方法是至关重要的。XML作为一种结构化数据存储和交换格式,广泛应用于网络通信、配置...

    java解析xml数据---sax解析器

    Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...

    XML解析实践之DOM解析和SAX解析.rar

    在进行XML解析时,需要注意以下几点: 1. 选择解析器:Java中,有如DOM4J、JAXB、Apache Xerces等库支持DOM解析;SAX解析则可以使用Java内置的SAXParserFactory。Python中,有ElementTree库支持DOM和SAX解析。 2. ...

    xml解析(sax,dom,jdom)

    本文将深入探讨三种主要的XML解析技术:SAX(Simple API for XML)、DOM(Document Object Model)和JDOM。 1. **SAX解析**: SAX解析器是一种基于事件驱动的解析方式,它逐行读取XML文档,当遇到文档的开始、结束...

    XML解析方式SAX和DOM比较.

    XML(eXtensible Markup Language)是一种用于存储和传输数据的...在实际开发中,根据项目需求和资源限制选择合适的XML解析方式至关重要。理解SAX和DOM的特性可以帮助我们更好地处理XML数据,提高程序的效率和稳定性。

Global site tag (gtag.js) - Google Analytics