`

XML解析(SAX解析)

XML 
阅读更多

1. SAX的基本原理及常用的接口

    * Simple API for XML,对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)的开始与结束时会通知事件处理函数,由事件处理函数做相应的动作,然后继续扫描,知道文档结束。

    * SAX的常用接口

        - ContentHandler接口,位于org.xml.sax下。当XML解析器开始解析XML输入文档时,它会遇到诸如文档的开头和结束、元素的开头和结束以及原色中的字符数据等事件,XML解析器会调用Contenthandler接口中相应的方法来响应该事件。

    * 特点

        - 优点: 适合查询

        - 缺点: 不适合插入元素和删除元素

    * 代码示例

        - SaxParseTest.java

package sax1;

import javax.xml.parsers.*;

import org.xml.sax.*;

import org.xml.sax.helpers.*;

import java.io.*;

/**
 * Title: 使用SAX解析XML
 */

public class SaxTestHandler extends DefaultHandler {
	public static void main(String[] argv) {
		try {
			// 建立SAX解析工厂
			SAXParserFactory spfactory = SAXParserFactory.newInstance();
			// 生成SAX解析对象
			SAXParser parser = spfactory.newSAXParser();
			// 指定XML文件,进行XML解析
			parser.parse(new File("src/book.xml"), new SaxTestHandler());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 方法说明:文件打开时调用
	 */
	public void startDocument() {
		System.out.println("***开始解析***");
	}
	/**
	 * 方法说明:当遇到开始标记时调用
	 */
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		System.out.println("节点开始:" + qName);
		for (int i = 0; i < attributes.getLength(); i++) {
			System.out.println("节点属性名称:" + attributes.getQName(i));
			System.out.println("节点属性值:" + attributes.getValue(i));
		}
	}
	/**
	 * 方法说明:当分析器遇到无法识别为标记或者指令类型字符时调用
	 */
	public void characters(char[] ch, int offset, int length)
			throws SAXException {
		System.out.println("节点数据:" + new String(ch, offset, length));
	}
	/**
	 * 方法说明:当遇到节点结束时调用
	 */

	public void endElement(String uri, String localName, String qName) {
		System.out.println("节点结束:" + qName);
	}
	/**
	 * 方法说明:当到文档的末尾调用
	 */
	public void endDocument() {
		System.out.println("****文件解析完毕****");
	}

}

         - xml文件

<?xml version="1.0" encoding="GBK" ?>  
<book>  
  <title>Java实例一百例</title>  
  <page id="1">  
    <title>基础知识篇</title>  
    <file>base.htm</file>  
  </page>  
  <page id="3">  
    <title>SWING篇</title>  
    <file>swing.htm</file>  
  </page>  
  <page id="28">  
    <title>EJB篇</title>  
    <file>ejb.htm</file>  
  </page>  
  <page id="33">  
    <title>DOM篇</title>  
    <file>xmldom.htm</file>  
  </page>  
</book>  

 

    * 两种方式读取xml文件

        - 读文件方式

            见上例。

        - 读取xml字符串

//reader方式
	public static void sax_reader() {
		FileOperate fo = new FileOperate();
		String path = SaxTest.class.getResource("").getPath();
		String xmls;
		try {
			xmls = fo.readTxt(path + "../book.xml", "");

			SAXParserFactory factory = SAXParserFactory.newInstance();
			XMLReader reader;

			reader = factory.newSAXParser().getXMLReader();
			reader.setContentHandler(new SaxTestHandler());
			reader.parse(new InputSource(new StringReader(xmls)));
		} catch (Exception e1) {
			e1.printStackTrace();
		}
	}
 

 

 

 

分享到:
评论

相关推荐

    android mars视频代码 XML解析 SAX解析XML xml 源码

    www.mars-droid.com/Android开发视频教程 代码 源码 mars老师讲课 android 视频源码 SAX解析XML xml 源码(在此特别感谢mars的无私奉献,此代码为跟随视频边学边做的)

    SAX解析XML文件实例

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

    Android XML解析 SAX DOM Pull

    在Android中,有三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull Parser。下面将详细介绍这三种解析方式,并结合person类的实例进行讲解。 1. SAX解析: SAX是一种事件驱动...

    XML解析之SAX解析DEMO

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

    Sax解析XML文件解析

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

    android xml文件解析 SAX

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

    sax解析xml尤其是获取元素的值或者内容

    SAX(Simple API for XML)是XML解析的一种方式,它采用事件驱动模型,适用于处理大型XML文档,因为它不需要将整个文档加载到内存中。本文将深入探讨如何使用SAX解析XML并获取元素的值或内容。 首先,SAX解析器以...

    sax解析xml本地读取xml

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

    XML文件c语言 dom和sax模式解析

    Xerces-C++是一个开源的XML解析器,它提供了C++接口,但也可用于C语言项目。通过Xerces-C++,你可以创建解析器,解析XML文件,然后遍历和操作DOM树。例如,你可以找到特定的元素,获取其属性值,或者修改文档内容。 ...

    XML的SAX解析

    SAX解析器以事件驱动的方式工作,它读取XML文档,当遇到文档的开始、元素开始、元素结束、文本内容等事件时,会触发相应的回调函数。这种方式避免了整个文档加载到内存中,适合处理大文件或资源有限的环境。 以下是...

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

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

    xml文件解析SAX

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

    Android XML解析——Sax解析XML

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

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

    本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析器的使用,并且提到了使用JDOM和JOM4J这两个Java库来处理XML。 1. **DOM解析**:DOM是一种树型结构,它将整个XML文档加载到内存中...

    XML通过sax解析JSON格式

    SAX(Simple API for XML)是一种基于事件驱动的XML解析器,适用于处理大型XML文档,因为它不会将整个文档加载到内存中。 标题中提到的"XML通过SAX解析为JSON格式"是指使用SAX解析器来读取XML文档,并将其转换成...

    Java SAX解析Xml文档Demo

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

    sax解析xml文件

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

    xml sax解析

    SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式处理XML文档,相较于DOM(Document Object Model)解析器,SAX解析更加轻量级和高效。 SAX解析的核心思想是读取XML文档时,每当遇到一个元素、...

    android xml 的解析 sax dom pull 解析

    1. SAX解析: SAX(Simple API for XML)是一种基于事件驱动的解析方式。它不会一次性加载整个XML文档到内存,而是逐行读取,当遇到特定的XML元素时(如开始标签、结束标签、文本节点等),会触发相应的回调函数。...

    Android XML解析之SAX解析

    本篇主要讨论的是SAX解析,这是一种基于事件驱动的、高效的解析方式,适合处理大体积的XML文件。 SAX解析器逐行读取XML文档,当遇到开始标签、结束标签、文本内容等元素时,会触发相应的回调函数,开发者可以在这些...

Global site tag (gtag.js) - Google Analytics