`
mw08091020
  • 浏览: 14656 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

SAX解析XML文档

 
阅读更多
 一、SAX解析XML文档允许在读取文档是就对文档进行处理,而不必等到整个文档装载完才会进行操作;SAX采用时间处理的方式解析XML文件,利用SAX解析XML文档,涉及两个部分:解析器和是事件处理器。

二、SAX解析XML文档步骤:

(1)创建解析工厂;

(2)得到解析器 ;

(3)获取读取器;

(4)设置内容处理器;

(5)读取XML文档

三、实例:

book.xml

<?xml version="1.0" encoding="UTF-8"?>
<书架>
	<书><书名  aa="bbb">Android技术开发大全</书名>
		<作者>***</作者>
		<售价>59</售价>
	</书>
	<书>
		<书名>Effective Java</书名>
		<作者>******</作者>
		<售价>68</售价>
	</书>
</书架>
用SAX解析book.xml文档,并用JavaBean封装
package cn.moving.parseXml;

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

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

public class SAXParse2 {
	public static void main(String args[]) throws Exception, SAXException {
		// 创建解析工厂
		SAXParserFactory sf = SAXParserFactory.newInstance();
		// 创建解析工厂得到解析器 获取读取器设置内容处理器读取XML文档
		SAXParser parser = sf.newSAXParser();
		// 获取读取器
		XMLReader reader = parser.getXMLReader();
		// 设置内容处理器
		reader.setContentHandler(new Handler());
		// 读取XML文档
		reader.parse("src/book.xml");
	}
}

class Handler extends DefaultHandler {
	
	private String currentTag ;
	private int needNumber = 2;
	private int currentNumber = 1;

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		currentTag = qName;
		if (("作者".equals(currentTag) )) {
			currentNumber++;
		}
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if(currentNumber == 2&¤tTag.equals("作者")){
			System.out.println(new String(ch, start, length));
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
	
	}

}
        四、将解析出来的节点,用JavaBean对象封装起来,便于进行持久操作 
package cn.moving.parseXml;

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.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class SAXAndBean {
	public static void main(String args[]) throws Exception, SAXException {
		// 创建解析工厂
		SAXParserFactory sf = SAXParserFactory.newInstance();
		// 得到解析器
		SAXParser parser = sf.newSAXParser();
		// 获取读取器
		XMLReader reader = parser.getXMLReader();
		// 设置内容处理器
		BeanListHandler lh = new BeanListHandler();
		reader.setContentHandler(lh);
		// 读取XML文档
		reader.parse("src/cn/moving/parseXml/outbook.xml");

		List<Book> books = lh.getBooks();
		System.out.println(books);
	}
}

class BeanListHandler extends DefaultHandler {

	private List<Book> list = new ArrayList<Book>();
	private Book book;
	private String currentTag;

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		currentTag = qName;
		if (("书".equals(currentTag))) {
			book = new Book();
		}
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (("书名").equals(currentTag)) {
			book.setName(new String(ch, start, length));
		}
		if (("作者").equals(currentTag)) {
			book.setAuthor(new String(ch, start, length));
		}
		if (("售价").equals(currentTag)) {
			book.setPrice(new String(ch, start, length));
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		currentTag = null;// /////
		if (("书").equals(qName)) {
			list.add(book);
			book = null;
		}
	}

	public List<Book> getBooks() {
		return list;
	}
}

JavaBean:

package cn.moving.parseXml;

public class Book {
	private String name ;
	private String author;
	private String price;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	
	

}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics