`
臻是二哥
  • 浏览: 189237 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Java技术分享
浏览量:0
社区版块
存档分类
最新评论

SAX

    博客分类:
  • JAVA
 
阅读更多
java中提供了一系列的接口用于自定义解析xml的文件,中DefaultHandler是SAX事件处理程序的基类,通过重写SAX类,可以自定义对xml文件的解析。

在重写defaultHandler类时候,有一个重点是设立tag标记位,这个标记为用于记录当前处理的元素是哪一个,因为xml解析是一个嵌套的结构,character中可能还会调用startElement,因此必须设立一个标记位teg用于标记当前startElement解析到哪个标签了,然后character才能根据不同的tag定义不同的方法。

import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.*;
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import java.io.*;

class Book
{
	private String id;
	private String name;
	private String price;
	public void setId(String id)
	{
		this.id=id;
	}
	public void setName(String name)
	{
		this.name=name;
	}
	public void setPrice(String price)
	{
		this.price=price;
	}
	public String toString()
	{
		return id+":"+name+":"+price;
	}
}
class SaxParseService extends DefaultHandler
{
	private ArrayList<Book> books;
	private Book book;
	private String tag;
	public void startDocument() throws SAXException
	{
		System.out.println("开始解析");
		books=new ArrayList<Book>();
	}
	public void startElement(String uri,String localName,String pName,Attributes attrs) throws SAXException
	{
		if("book".equals(pName))
		{
			book=new Book();
			book.setId(attrs.getValue(0));
		}
		tag=pName;
	}
	public void characters(char [] ch ,int start ,int length )
	{
		if(tag!=null)
		{
			if("name".equals(tag))
		    {
				book.setName(new String(ch,start,length));
			}
			else if("price".equals(tag))
			{
				book.setPrice(new String(ch,start,length));
			}
		}
	}
	public void endElement(String uri,String localName,String pName) throws SAXException
	{
		if("book".equals(pName))
		{
			books.add(book);
			book=null;
		}
		tag=null;
	}
	public void endDocument() throws SAXException
	{
		System.out.println("结束解析");
	}
	public ArrayList<Book> getBooks()
	{
		return books;
	}
}
public class Demo
{
	public static void main(String [] args) throws Exception
	{
		SAXParserFactory sax=SAXParserFactory.newInstance();
		SAXParser parser=sax.newSAXParser();
		SaxParseService handle=new SaxParseService();
		InputSource input=new InputSource(new FileInputStream("book.xml"));
		parser.parse(input,handle);
		ArrayList<Book> books=handle.getBooks();
		for(Book book:books)
		{
			System.out.println(book);
		}
	}

}


附件是book.xml
0
0
分享到:
评论

相关推荐

    SAX的jar包 SAX的jar包

    SAX的jar包 SAX的jar包SAX的jar包 SAX的jar包 SAX的jar包

    dom解析和sax解析

    DOM(Document Object Model)解析和SAX(Simple API for XML)解析是两种常见的XML文档解析方式,它们在处理XML数据时有不同的策略和优缺点。 DOM解析是一种基于树型结构的XML解析方法。当一个XML文档被DOM解析器...

    dom4j下sax解析xml

    DOM(Document Object Model)和SAX(Simple API for XML)是两种主要的XML解析方法。在Java编程中,dom4j库提供了对这两种解析方式的支持。 **DOM解析**: DOM解析器将整个XML文档加载到内存中,创建一个树形结构...

    SAX解析网络编程

    SAX(Simple API for XML)是一种基于事件驱动的XML解析方式,它在网络编程中扮演着重要角色,特别是在处理大型XML文档时,由于其高效、内存占用小的特点,被广泛采用。本文将深入探讨SAX解析在网络编程中的应用及其...

    SAX类解析XML

    在处理大型XML文档时,SAX(Simple API for XML)解析器是一种高效的流式解析方法,它不会一次性加载整个XML文档到内存,而是逐个事件地处理XML元素,从而节省资源。 SAX解析XML的基本概念: 1. 事件驱动:SAX解析...

    SAX解析.pdf

    SAX解析是一种流式的XML解析方式,它使用了一种基于事件的模型来处理XML文档。开发者不需要在内存中构建整个文档的树形结构,而是通过响应XML解析器发出的事件来处理XML文档。这种方式特别适合处理大型的XML文件,...

    poi 自己写的excel sax方式导入大量数据

    为了解决这个问题,Apache POI 提供了SAX解析器,它是一种基于事件驱动的解析方式,可以有效地处理大型Excel文件。 SAX(Simple API for XML)解析方式与DOM不同,它不会一次性加载整个文件到内存,而是逐行读取,...

    sax解析xml本地读取xml

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

    java中的sax解析方案

    Java中的SAX解析方案是一种高效的XML处理方法,尤其适用于大体积的XML文件。SAX(Simple API for XML)是基于事件驱动的解析器,它不会像DOM解析那样将整个XML文档加载到内存中,而是逐行读取并触发相应的事件处理器...

    SAX 实例教程及代码

    SAX(Simple API for XML)是一种轻量级的解析XML数据的方法,相比于DOM解析,它更节省内存,更适合处理大型XML文件。SAX是事件驱动的解析器,它读取XML文档并触发一系列的事件,如开始文档、开始元素、字符数据等,...

    XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细

    常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...

    sax9.0解析XML

    SAX(Simple API for XML)是一种轻量级的解析XML的API,它是Java平台上的一个标准接口,用于处理XML文档。SAX9.0是该API的一个特定版本,提供了更高效、更灵活的XML解析能力。这个版本可能包含了对XML 1.0和1.1规范...

    西门子执行器SAX61.03

    ### 西门子执行器SAX61.03关键知识点解析 #### 一、产品概览 **西门子SAX61.03**是西门子楼宇科技系列中的一款电动阀门执行器,主要应用于暖通空调系统的控制与安全切断。这款执行器能够直接安装在阀门上,并且具有...

    天气预报接口,通过sax 解析接口数据

    本案例主要涉及的是一个天气预报接口,该接口返回的数据格式为XML,我们使用SAX(Simple API for XML)进行解析。接下来,我们将深入探讨天气预报接口、SAX解析以及如何处理XML数据。 首先,天气预报接口是一个API...

    Sax解析XML文件解析

    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文档到内存,而是采用...

    SAX解析XML源码

    在Android开发中,处理XML数据时,我们常常会遇到两种主要的解析方式:DOM(Document Object Model)和SAX(Simple API for XML)。本篇主要探讨的是SAX解析XML的源码实现。 SAX解析器是一种事件驱动的解析器,它...

    Android之SAX解析XML

    本文将深入探讨如何在Android环境中使用SAX(Simple API for XML)解析XML文件。SAX是一种事件驱动的解析器,它在读取XML文档时触发一系列事件,开发者可以注册事件处理器来处理这些事件,从而实现对XML数据的高效、...

    android使用SAX解析xml

    SAX(Simple API for XML)是一种事件驱动的解析器,适用于处理大型XML文档,因为它不需要将整个文档加载到内存中,而是逐行读取,从而节省资源。本篇文章将详细介绍如何在Android环境中使用SAX解析器来处理从网络...

    java用sax实现重写xml文件内容

    Java中的SAX(Simple API for XML)是一种轻量级的解析器,用于处理XML文档。它以事件驱动的方式工作,当解析器遇到XML文档的各个部分时,会触发相应的事件,如开始文档、结束文档、开始元素、结束元素等。这种方法...

Global site tag (gtag.js) - Google Analytics