SAX解析XML(入门)

本文介绍了一个使用Java SAX解析XML文件的例子。通过重写DefaultHandler类的方法,实现了XML文件中书籍信息的读取,并展示了如何获取和处理XML中的元素及内容。
</pre><p><span style="font-size:14px;">xml文件为myClass.xml:</span></p><p><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?> 
<books> 
   <book id="001"> 
      <title>张三传记</title> 
      <author>张三</author> 
   </book> 
   <book id="002"> 
      <title>李四传记</title> 
      <author>李四</author> 
   </book> 
</books> 
这个类主要就是重写了DefaultHandler类的方法。然后getList和getReader方法就是便于测试的。
package cn.spy.reader;

import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
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;
import cn.spy.po.Book;

public class SaxReader extends DefaultHandler{

	
	ArrayList<Book> list=new ArrayList<Book>();
	private String currentTag;
	private Book book;
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		
		if("title".equals(currentTag)){
			String title=new String(ch,start,length);
			book.setTitle(title);
		}
		if("author".equals(currentTag)){
			String author=new String(ch,start,length);
			book.setAuthor(author);
		}
	}

	

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

	

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		currentTag=qName;
		if("book".equals(currentTag)){
			book=new Book();
		}
		
	}
	public ArrayList<Book> getList(){
		
		return list;
	}
	public XMLReader getReader() throws ParserConfigurationException, SAXException {
		SAXParserFactory factory=SAXParserFactory.newInstance();
		SAXParser parser=factory.newSAXParser();
		XMLReader reader=parser.getXMLReader();
		return reader;
	}
	
}
测试类:

public class SaxTest {

	public static void main(String[] args) throws Exception{
		
		SaxReader saxReader=new SaxReader();
		XMLReader reader=saxReader.getReader();
		reader.setContentHandler(saxReader);
		reader.parse("src/myClass.xml");
		ArrayList<Book> arrayList=saxReader.getList();
		for(Book book:arrayList){
			System.out.println(book.getTitle()+":"+book.getAuthor());
		}
	}
}

测试结果:

张三传记:张三
李四传记:李四


API:

startElement:
接收元素开始的通知。

默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在每个元素的开始处采取特定的操作(如,分配新的树节点或将输出写入文件).

uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。
localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。

endElement:

          接收元素结束的通知。

          默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在每个元素的结束处采取特定的操作(如,结束树节点或将输出写入文件)。

         uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。

   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。

   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。

characters:
接收元素中字符数据的通知。

默认情况下,不执行任何操作。应用程序编写者可以重写此方法,以便对每块字符数据采取特定的措施(如将该数据添加到节点或缓冲区,或者将该数据打印到文件)。


ch - 字符。
start - 字符数组中的开始位置。
length - 从字符数组中使用的字符数。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值