`
xglla_1129
  • 浏览: 10618 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Sax读XML

阅读更多

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id="12">
		<name>thinking in java</name>
		<price>85.5</price>
	</book>
	<book id="15">
		<name>Spring in Action</name>
		<price>39.0</price>
	</book>
</books>
 

Book.java

public class Book {
	private int id;
	private String name;
	private float price;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	@Override
	public String toString(){
		return this.id+":"+this.name+":"+this.price;
	}
}
 

ParseTest.java

import java.io.InputStream;
import java.util.List;


public class ParseTest {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		    SaxParseService sax = new SaxParseService();  
	        InputStream input = sax.getClass().getClassLoader().getResourceAsStream("test.xml");  
	        List<Book> books = sax.getBooks(input);  
	        for(Book book : books){  
	            System.out.println(book.toString()); 
	}
	}

}
 

SaxParseService.java

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


public class SaxParseService extends DefaultHandler{
	private List<Book> books = null;
	private Book book = null;
	private String preTag = null;//作用是记录解析时的上一个节点名称
	
	public List<Book> getBooks(InputStream xmlStream) throws Exception{
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser parser = factory.newSAXParser();
		SaxParseService handler = new SaxParseService();
		parser.parse(xmlStream, handler);
		return handler.getBooks();
	}
	
	public List<Book> getBooks(){
		return books;
	}
	
	@Override
	public void startDocument() throws SAXException {
		books = new ArrayList<Book>();
	}

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		if("book".equals(qName)){
			book = new Book();
			book.setId(Integer.parseInt(attributes.getValue(0)));
		}
		preTag = qName;//将正在解析的节点名称赋给preTag
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if("book".equals(qName)){
			books.add(book);
			book = null;
		}
		preTag = null;/**当解析结束时置为空。这里很重要,例如,当图中画3的位置结束后,会调用这个方法
		,如果这里不把preTag置为null,根据startElement(....)方法,preTag的值还是book,当文档顺序读到图
		中标记4的位置时,会执行characters(char[] ch, int start, int length)这个方法,而characters(....)方
		法判断preTag!=null,会执行if判断的代码,这样就会把空值赋值给book,这不是我们想要的。*/
	}
	
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		if(preTag!=null){
			String content = new String(ch,start,length);
			if("name".equals(preTag)){
				book.setName(content);
			}else if("price".equals(preTag)){
				book.setPrice(Float.parseFloat(content));
			}
		}
	}
	
}
 
分享到:
评论

相关推荐

    dom和sax读XML源码范例

    处理XML文件时,我们通常会使用两种主要的方法:DOM(Document Object Model)和SAX(Simple API for XML)。本文将深入探讨这两种解析方式,并通过代码示例来阐述它们的工作原理。 DOM解析是将整个XML文档加载到...

    使用Sax技术读XML文档:SaxReaderXML.rar

    而SAX(Simple API for XML)是一种解析XML文档的事件驱动模型,它以低内存占用和高效处理大量数据著称。本篇文章将深入探讨如何使用SAX技术读取XML文档,以及SaxReaderXML.rar压缩包中的相关内容。 首先,SAX解析...

    使用Sax方法读XML文档:SaxReaderXML.zip

    标题“使用Sax方法读XML文档:SaxReaderXML.zip”指出,这个压缩包包含了一个关于如何使用SAX解析器来读取XML文档的示例。SAX解析器的工作方式是,当解析到XML文档中的某个元素、属性或文本时,会触发相应的事件,...

    【下载】Android 使用SAX实现XML的读和写,使用XML与后台交互

    本文将深入探讨如何在Android平台上利用SAX(Simple API for XML)解析器来读取和写入XML数据,以及如何利用XML进行后台交互。 SAX是一种事件驱动的XML解析方式,与DOM(Document Object Model)不同,它不需要一次...

    SAX解析XML文件实例

    而SAX(Simple API for XML)是XML解析的一种方式,它采用事件驱动模型,以流式处理XML文档,特别适合处理大型XML文件,因为它不需要将整个文件加载到内存中,从而节省了资源。 SAX解析器在读取XML文档时,会触发一...

    anroid SAX解析xml文件及实例

    2. **非回溯性**:SAX解析器一旦读过一个节点,就不会返回去检查或修改它,因此不适合需要前后文信息的解析场景。 3. **顺序解析**:SAX解析器按照XML文档的顺序逐个处理节点。 **二、SAX解析步骤** 1. **创建...

    SAX方式解析xml

    当解析器读到XML文档的相应部分时,会调用这些方法。例如,`startElement()`会在遇到XML元素的开始标签时被调用,传递元素名和其他相关信息。 以下是一个简单的SAX解析XML的步骤概述: 1. 实现`ContentHandler`...

    QT中读取XML文件三种方式 的实例

    XML(eXtensible Markup Language)是一种通用的文本格式,被广泛运用于数据交换和数据存储(虽然近年来 JSON 盛行,大有取代 XML 的趋势,但是对于一些已有系统和架构,比如 WebService,由于历史原因,仍旧会继续...

    基于SAX的XML数据结构聚簇存储方法.pdf

    例如,在网络传输中,SAX可以边读边处理,对于动态生成的XML数据尤其适用。 在实际应用中,基于SAX的XML数据结构聚簇存储策略可以用于多种场景,比如网络服务、数据交换、文档管理等。通过结构聚簇存储,能够对XML...

    android入门级解析xml SAX

    SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调...

    Python3基于sax解析xml操作示例

    1. 对大型文件进行处理时,因为它可以边读边处理,不需要把整个XML文档一次性加载到内存中,从而节省内存; 2. 当只需要XML文件的部分内容,或者只需从文件中得到特定信息时,可以使用SAX实现对特定部分的快速访问;...

    C++读xml文件

    - 探索其他XML解析库,如pugixml(更快,更轻量级)或Xerces-C++(更全面,支持DOM和SAX解析)。 - 学习XPath或XSLT,它们是用于查询和转换XML的强大工具。 总结,使用C++读取XML文件涉及选择合适的解析库、理解...

    JAVA读XML:sax,dom,jdom,dom4j的比较以及选择.doc

    Java 读取XML文件时,有多种解析器可供选择,分别是SAX、DOM、JDOM和DOM4J。这些解析器各有优缺点,适用于不同的场景。 SAX(Simple API for XML)是一种基于事件驱动的解析器。它在解析XML文件时,会按顺序触发一...

    Android中使用sax解析xml文件的方法

    SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML 语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调...

    sax2.0.1jar,xml文件解析

    sax2.0.1版本的jar包,可用于xml文件的解析。...SAX采用事件驱动`,也就是说,它并不是需要解析完整的文档,在按内容顺序解析文档的过程中,Sax会判断当前读到的字符是否符合XMl语法的某部分,如果符合就会触发事件。

    java操作xml编程实例(sax).doc

    然后,解析器读取名为“exampleA.xml”的文件,触发我们之前定义的事件处理器方法。 需要注意的是,这里的`XMLReader`是通过`XMLReaderFactory.createXMLReader()`创建的,并且使用了特定的解析器实现(Apache ...

    java读xml,java操作xml文件

    这段代码读取名为"input.xml"的XML文件,并打印出所有员工节点的相关信息。 2. **SAX解析器**:使用`org.xml.sax.helpers.DefaultHandler`和`org.xml.sax.XMLReader`进行解析。SAX解析器通常适用于处理大型XML文件...

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

    4. **SAX解析**:与DOM不同,SAX解析器不将整个XML文档加载到内存,而是通过事件回调函数处理每个元素的开始和结束、处理属性等。在易语言中,我们需要定义一系列的事件处理函数,如`开始文档`、`结束文档`、`开始...

    vb读xml节点、属性值

    - 对于大型XML文件,可以考虑使用SAX解析器(在VB.NET中为`XmlReader`),它只读取文档的一部分,从而减少内存占用。 - 如果XML结构固定,可以使用`XDocument`(VB.NET)的LINQ查询,提供更简洁的语法。 通过以上...

Global site tag (gtag.js) - Google Analytics