`
zhiweiofli
  • 浏览: 515458 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java与XML原来可以这么简单--基于SAX标准

阅读更多

DOM处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的:这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存。更甚的是,Java VM中最耗资源的一个动作就是new一个对象,要存储DOM中的节点相对应得也就要new很多个对象,对性能的影响显而易见了。

 

在SAX解析器装载XML文件时,它遍历文件文档并在其主机应用程序中产生事件(经由回调函数指派函数 或者任何可调用平台完成这一功能)表示这一过程。在文档的开始和结束时触发文档处理事件。在文档内每一XML元素接受解析的前后触发元素 事件。任何元数据通常都由单独的事件交付。在处理文档的DTD或Schema时产生DTD 或Schema事件。错误事件用来通知主机应用程序解析错误。

 

 

SAX对DOM,在什么情况下采用这种或者那种API 并没有确定的严格规则;具体情况具体分析。所有的SAX处理都在一次遍历中完成的;因此,在解析同等大小的文档时SAX通常会相比DOM提供更好的性能 (因为DOM必须遍历树 结构)。此外,与DOM是比,因为在给定的时间之内只需要XML文档的一部分装入内存,所以SAX通常在处理更大文件时内存的利用效率也来得更高(DOM在开始解析文档之前必须把全部XML文档装入内存)。

SAX也不是没有缺点。SAX应用程序一般都比较长,程序中充斥着大量的if/else结构用来确定处理特定元素 时所采用的运动。同样的,处理多个XML元素之间散布的数据结构也很成问题,因为解析事件之间必须保存中间数据。最后,SAX应用程序的事件 处理结构一般意味着SAX应用程序是针对特定文件结构定制构建的,而DOM应用程序则更具一般性。

 

下面献上自己写的一个例子,写的不好望多多包含:

 

public class SAXCounter2 extends DefaultHandler {

	public static void main(String[] args) {
		String fileName = "main.xml";
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser saxParser = null;

		try {
			saxParser = spf.newSAXParser();// 创建出SAX解析
			// 将解析器和解析对象XMLDOMData.xml联系起来,同时指定事件回调方法的对象开始解析
			saxParser.parse(new File(fileName), new SAXCounter2());
		}  catch (SAXException se) {
			System.err.println(se.getMessage());
			System.exit(1);
		} catch (IOException ioe) {
			System.err.println(ioe);
			System.exit(1);
		} catch (Exception ex) {
			System.err.println(ex);
			System.exit(1);
		} 
	}
	// 定义开始解析xml的方法
	public void startDocument() throws SAXException {
		System.out.println("SAX Event: START DOCUMENT(文档开始)");
	}

	public void endDocument() throws SAXException {
		System.out.println("SAX Event: END DOCUMENT(文档结束)");
	}

	// 对每一个<xxx>开始元属性进行处理
	public void startElement(String namespaceURI, String localName,
			String qName, Attributes atts) throws SAXException {
		// 打印除该标签的名称
		System.out.println("SAX Event: START ELEMENT[ " + qName + " ]");
		for (int i = 0; i < atts.getLength(); i++) // 如果 有属 性,我 们 也一并打 印 出来...
		{
			/*
			 * 对带有属性的标签如何获得其属性值,比较困难。需要编程startElement方法中的Attributes参数
			 */
			System.out.print("ATTRIBUTE: " + atts.getLocalName(i) + "--VALUE: "
					+ atts.getValue(i) + "\n");
		}
	}
	// 在遇到</xxx>结束后
	public void endElement(String namespaceURI, String localName, String qName)
			throws SAXException {
		System.out.println("SAX Event: END ELEMENT[ " + qName + " ]\n");
	}
	// 这里将是处理<xxx></xxx>之间的标签体的值的方法
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		System.out.print("\nSAX Event: CHARACTERS start:");
		try {
			OutputStreamWriter outw = new OutputStreamWriter(System.out);
			outw.write(ch, start, length); // 将该标签体的文字串输出到控制台上
			outw.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.print("\nSAX Event: CHARACTERS end\n");
	}

}
 
分享到:
评论

相关推荐

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

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

    XML四种解析方式------DOM SAX JDOM DOM4J

    SAX解析器是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档,而是逐行读取并触发相应的事件,如开始元素、结束元素、字符数据等。这种方式节省了内存,适合处理大型XML文件,但不支持随机访问,且需要...

    android----xml Sax解析示例

    SAX解析的基本原理是,当解析器读取XML文档时,遇到每个元素、属性或其他XML结构,都会触发一个特定的事件,开发者可以通过实现SAX解析器的事件接口来响应这些事件。这种方式对比DOM解析(将整个XML文档加载到内存中...

    Java and XML(英文第三版)_java_xml_birdsolc_源码

    《Java and XML(英文第三版)_java_xml_birdsolc_源码》是关于Java与XML集成编程的一本权威指南,特别适合于那些希望深入理解如何在Java应用程序中有效地使用XML技术的开发者。这本书详细阐述了Java平台上的XML处理...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    SAX(Simple API for XML)是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档,而是逐行读取,当遇到文档的某个部分(如开始标签、结束标签等)时,触发相应的事件回调。这种方式内存占用小,适合处理大...

    Java SAX解析Xml文档Demo

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

    Android网络之数据解析----SAX方式解析XML数据

    SAX(Simple API for XML)是一种基于事件驱动的解析器,它不将整个XML文档加载到内存中,而是逐行读取,遇到特定的标签时触发相应的事件。这种方式使得SAX解析器在处理大型XML文件时,相比DOM(Document Object ...

    SAX与JAVA.rar_SAX java_java SAX_java sax download_sax_xml

    标题中的"SAX与JAVA.rar"指的是Java编程语言中用于处理XML文档的一种解析器——SAX(Simple API for XML)。SAX是一种基于事件驱动的解析模型,它以流式的方式读取XML文档,逐个处理XML元素,而不是一次性加载整个...

    POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析

    标题 "POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析" 提到了Apache POI库的一个高级话题,主要关注的是如何使用XSSF(XML Spreadsheet Formatting Streams)和SAX(Simple API for XML)的Event ...

    javaSAX方式解析xml文档

    Java SAX方式解析XML文档是一种高效的处理大型XML文件的方法,它基于事件驱动模型,不将整个XML文档加载到内存中,而是逐个处理XML元素。这种方式非常适合处理大文件,因为它节省了内存,但需要编写更多的代码来处理...

    Java解析XML文件的DOM和SAX方式.doc

    Java 解析 XML 文件的 DOM 和 SAX 方式 Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种...

    vtd-xml vtd-xml vtd-xml

    7. **集成与兼容性**:VTD-XML库可以轻松地集成到Java项目中,同时也提供了.NET版本,兼容C#和VB.NET等语言。此外,它还与其他XML工具和标准如XPath、XSLT和XML Schema有良好的互操作性。 8. **源码开放**:VTD-XML...

    Java使用sax、dom、dom4j解析xml文档

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在Java应用程序中,XML经常被用来作为数据交换的载体。Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document ...

    java-SAX解析XML、java正则表达式.

    Java编程语言在处理XML数据时提供了多种方法,其中SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。它不会一次性加载整个XML文档到内存,而是逐行读取,当遇到XML元素的开始...

    Java中XML配置文件的读取(sax).doc

    其中,SAX(Simple API for XML)是一种基于事件驱动的XML解析器,它可以快速高效地读取XML文件。 二、SAX解析XML配置文件 在本文中,我们使用SAX解析XML配置文件。首先,我们需要创建一个ConfigParser类,该类...

    java-xml相互转化

    当我们需要从XML文件中提取数据并创建相应的Java对象时,可以使用DOM(Document Object Model)、SAX(Simple API for XML)或StAX(Streaming API for XML)等解析器。DOM解析器一次性加载整个XML文档到内存,形成...

    XMLDemo_java.rar_XMLDemo_java_java xml_sax_to write xml in java

    本示例"XMLDemo_java.rar"是基于Java实现的XML处理程序,涵盖了SAX(Simple API for XML)和DOM(Document Object Model)两种解析方式。 1. **SAX解析**: SAX是一种事件驱动的解析器,它不会一次性加载整个XML...

    Java XML编程指南

    - JDBC-XML:Java标准库中的接口,支持XML数据类型的SQL操作。 9. **XML安全**: - XML签名:确保XML文档的完整性和来源的真实性。 - XML加密:保护XML数据的隐私,防止未经授权的访问。 通过深入学习和实践...

    sax解析xml本地读取xml

    以下是一个简单的SAX解析XML文件的Java代码示例: ```java import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler;...

    JAVA与XML程序开发

    4. **SOAP(Simple Object Access Protocol)和RESTful Web Services**:Java可以通过Apache CXF、Jersey等框架实现基于XML的SOAP服务或RESTful服务。SOAP是一种基于XML的协议,用于在不同系统间交换结构化信息;...

Global site tag (gtag.js) - Google Analytics