java------Xml解析之Sax解析基础

SAX解析

 1.事件处理                                                                    例子:

    事件元素:


       1.文档开始                                                                  <books>

       2.元素开始                                                                          <book>

       3.元素对象属性                         ----------》                                  <title>bookname</title>  

       4.元素结束                                                                           <book> 

       5.文档结束                                                                   <books>


    事件创建


  创建事件对象继承于org.xml.sax.helpers.DefaultHandler类,重写

startDocument()      <1.文档开始>

endDocument()       <5.文档结束>

startElement()          <2.元素开始>

endElement()           <4.元素结束>

characters()              <5.元素对象属性>

方法实现对事件中的元素的处理。


sax解析对象

一、SAX解析对象的创建

SAX解析对象是由SAX对象工厂所创建出来的,要创建一个sax解析对象,有如下过程:

1.创建sax对象工厂

2.从工厂中提出sax解析对象

代码:

SAXParserFactory sFactory=SAXParserFactory.newInstance();//获得一个解析工厂
SAXParser sParser=sFactory.newSAXParser();//获得一个sax解析对象

二、SAX对象的方法

     调用sax对象的parse方法,传入文件参数及事件处理对象实现xml解析。

代码:


DefaultHandler hander=new SaxHander();  //事件对象
InputStream input=new FileInputStream(“books.xml”);//
			//然后用解析对象的parse方法把文件和时间处理对象联系起来
			sParser.parse(input, hander);

至此解析完毕

下面给出例子:

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book bookno="001">
    <title>数据挖掘</title>
    <author>王一</author>
    <price>45</price>
    </book>
    <book bookno="002">
    <title>密码学</title>
    <author>王二</author>
    <price>50</price>
    </book>
</books>

创建SaxHander事件处理类

SaxHander.java

import java.util.ArrayList;
import java.util.List;

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

import book.Book;

public class SaxHander extends DefaultHandler {
	private String tag;  //记录当前处理的标签元素
	private Book book;
	private List<Book> list;
	
	//返回解析完毕的列表
	public List<Book> getList(){
		return list;
	}
	
	//文档开始解析
	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.startDocument();
		list=new ArrayList<Book>();
	}
	
    //文档结束解析
	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
	}
	
	
    //开始元素解析
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		super.startElement(uri, localName, qName, attributes);
		if(qName.equals("book")){
			book=new Book();
			String bookNo=attributes.getValue("bookno");
			book.setBookNo(bookNo);
			
		}
		tag=qName;
	}
     
	//元素结束解析
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		super.endElement(uri, localName, qName);
		if(qName.equals("book")){
			list.add(book);
			book=null;
		}
		tag=null;
	}
    
	
	//对元素中嵌入的元素解析
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
		super.characters(ch, start, length);
		if(tag!=null){
			String str=new String(ch,start,length).trim();//获得嵌入元素的值
			if(tag.equals("title")){
				book.setTitle(str);
			}
			if(tag.equals("author")){
				book.setAuthor(str);
			}
			if(tag.equals("price")){
				book.setPrice(Double.parseDouble(str));
			}
		}
	}
	

}

创建解析类  SaxParse.java

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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

import org.xml.sax.SAXException;

import book.Book;
import book.parseXml;

public class SaxParse {
	public List<Book> xmlParse(String fileName) {
		List<Book> list=new ArrayList<Book>();
		SAXParserFactory sFactory=SAXParserFactory.newInstance();//获得一个解析工厂
		SaxHander hander=new SaxHander();  //事件对象
		try {
			SAXParser sParser=sFactory.newSAXParser();//  获得一个解析对象
			InputStream input=new FileInputStream(fileName);
			//然后用解析对象的parse方法把文件和时间处理对象联系起来
			sParser.parse(input, hander);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		list=hander.getList();
		return list;
	}
	public static void main(String []args){
		SaxParse sp= new SaxParse();
		System.out.println("SAX解析结果:");
		List<Book> list=sp.xmlParse("books.xml");
		for(Book book:list){
		System.out.println(book.toString()); 
		}
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值