设为首页 加入收藏

TOP

数据存储(二)--SAX引擎XML存储(附Demo)(一)
2015-07-20 18:04:52 来源: 作者: 【 】 浏览:3
Tags:数据 存储 --SAX 引擎 XML Demo

Android SDK只支持采用SAX技术读取XML,SAX采用顺序读取的方式来处理XML文档。这就要求在每读取XML文档的某个节点时会触发相应的事件来处理这个节点。下面基于一个实例讲述SAX的使用:

public class Book 
{
	private String name;
	private String id;
	private String price;
	private String publisher;
	private int count;
    .... get,set方法省略
}

XML文件如下:

  

     
    
   
    12
   
    
   
    10
   
    
   
    21
    

  


XMLTool.java

1.构建一个工厂SAXParserFactory
2.构建并实例化SAXPraser对象

public class XMLTool {
	
	private static SAXParser getSAXParser() throws ParserConfigurationException, SAXException
	{
        SAXParserFactory parserFactory = SAXParserFactory.newInstance();
        return parserFactory.newSAXParser();
	}
	public static DefaultHandler parse(InputStream inStream,DefaultHandler handler){
		if(inStream!=null){
			try {
				SAXParser parser = getSAXParser();
				parser.parse(inStream, handler);
				return handler;
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				if(inStream!=null){
					try {
						inStream.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
		return null;
	}
}

BookXMLParser.java

public class BookXMLParser extends DefaultHandler
{
	
	private ArrayList
  
    dataList;
	private Book book;
	private StringBuffer stringBuffer = new StringBuffer();
	//private StringBuffer buffer=new StringBuffer();
	
	public ArrayList
   
     getData() { return dataList; } public void startDocument() throws SAXException { // TODO Auto-generated method stub dataList = new ArrayList
    
     (); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if(qName.equals("book")) { book = new Book(); book.setName(attributes.getValue("book:name")); book.setId(attributes.getValue("book:id")); book.setPrice(attributes.getValue("book:price")); book.setPublisher(attributes.getValue("book:publisher")); } super.startElement(uri, localName, qName, attributes); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub stringBuffer.append(ch,start,length); super.characters(ch, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub if(qName.equals("book")) { if(stringBuffer.toString()!=null && !stringBuffer.toString().equals("")) { book.setCount(Integer.parseInt(stringBuffer.toString().trim())); stringBuffer.setLength(0);//必须清空缓冲区 } dataList.add(book); } super.endElement(uri, localName, qName); } }
    
   
  

SAX引擎需要处理5个分析点,也可以称为分析事件。

1.开始分析XML文件。该分析点表示SAX引擎刚刚开始处理XML文件,但是还没有读取XML文件中的内容,该分析点对应:

public void startDocument() throws SAXException 
	{
		// TODO Auto-generated method stub
		dataList = new ArrayList
  
   ();
	}
  

在此方法里面可以做一些初始化的工作。

2.开始处理每一个XML元素。也就是遇到 这样的起始标记的时候都会触发这个分析节点,所对应的事件方法是startElement。在这个节点可以获得元素的名称、属性的相关信息。

public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException 
	{
		// TODO Auto-generated method stub
		if(qName.equals("book"))
		{
			book = new Book();
			book.setName(attributes.getValue("book:name"));
			book.setId(attributes.getValue("book:id"));
			book.setPrice(attributes
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇uva 646 - The Gourmet Club(暴力) 下一篇邮件、短信、相机、图库的使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: