加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

H2通用缓存加载(2)——使用sax解析xml

发布时间:2020-12-16 06:35:03 所属栏目:百科 来源:网络整理
导读:H2LoadConfig.xml ?xml version="1.0" encoding="gb2312"?h2 table name="zgcode" text="职工代码表" database="zg" loadClass="com.dyna.report.config.H2load.ZgCodeLoadCache" columnscolumn key="aaa102" text="代码值" type="varchar(6)" order="0"/col

H2LoadConfig.xml

<?xml version="1.0" encoding="gb2312"?>
<h2>
    <table name="zgcode" text="职工代码表" database="zg" loadClass="com.dyna.report.config.H2load.ZgCodeLoadCache">
    	<columns>
		<column key="aaa102"  text="代码值" type="varchar(6)" order="0"></column>
		<column key="aaa103" text="代码名称" type="varchar(100)" order="1"></column>
		<column key="aaa100" text="代码" type="varchar(20)" order="2"></column>
		<column key="aaz093" text="代码表id" type="long" order="3"></column>
		</columns>
	</table>
	<table name="jmcode" text="居民代码表" database="jm" loadClass="com.dyna.report.config.H2load.JmCodeLoadCache">
    	<columns>
		<column key="aaa102"  text="代码值" type="varchar(6)" order="0"></column>
		<column key="aaa103" text="代码名称" type="varchar(100)" order="1"></column>
		<column key="aaa100" text="代码" type="varchar(20)" order="2"></column>
		<column key="aaz093" text="代码表id" type="long" order="3"></column>
		</columns>
	</table>
	
</h2>


sax 是基于事件解析的,即当读取到某一标签事件,开始读取文档事件,标签结束事件等,使用sax读取xml文件,需要继承 DefaultHandler

H2ConfigParse.java 内容读取xml文件的类

package com.dyna.report.config.tools;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

import com.dyna.report.config.abstracts.AbstractH2LoadCache;
import com.dyna.report.config.exceptions.BussException;

public class H2ConfigParse extends DefaultHandler {
	private static Logger logger = Logger.getLogger(H2ConfigParse.class
			.getName());
	private Map<String,H2Table> h2tables;
	private Map<String,H2Column> columns;

	private H2Table table;
	private H2Column column;
	/**
	 * 加载文档事件
	 */
	public void startDocument() throws SAXException {
		logger.info("加载H2配置文件/WEB-INF/conf/H2LoadConfig.xml");
		h2tables = new HashMap<String,H2Table>();
		super.startDocument();
	}

	/**
	 * 加载标签事件
	 */
	public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
		logger.debug("开始读取标签"+qName);
		if("table".equalsIgnoreCase(qName)){
			table = new H2Table();
			table.setDatabase(attributes.getValue("database"));
			table.setName(attributes.getValue("name"));
			table.setText(attributes.getValue("text"));
			if(attributes.getValue("loadClass") != null &&!"".equals(attributes.getValue("loadClass"))){
				Object obj = Beanhelper.getClass(attributes.getValue("loadClass"));
				if(obj==null){
					throw new BussException(attributes.getValue("loadClass")+"在系统中未找到,请查验H2LoadConfig.xml配置是否正确");
				}
				if(! (obj instanceof AbstractH2LoadCache)){
					throw new BussException(attributes.getValue("loadClass")+"需继承自AbstractH2LoadCache,请查验该类是否正确");
				}
			   table.setLoadClass((AbstractH2LoadCache)obj);
			}
		}
		if("columns".equalsIgnoreCase(qName)){
			columns = new HashMap<String,H2Column>();
		}
		if("column".equalsIgnoreCase(qName)){
			column = new H2Column();
			column.setKey(attributes.getValue("key"));
			column.setText(attributes.getValue("text"));
			column.setType(attributes.getValue("type"));
			column.setOrder(attributes.getValue("order"));
			column.setTablename(table.getName());
		}
		
		super.startElement(uri,localName,qName,attributes);
	}

	/**
	 * 加载标签完毕
	 */
	public void endElement(String uri,String qName)
			throws SAXException {
		if("table".equalsIgnoreCase(qName)){
			h2tables.put(table.getName(),table);
			table=null;
		}
		if("columns".equalsIgnoreCase(qName)){
			table.setColumns(columns);
			columns=null;
		}
		if("column".equalsIgnoreCase(qName)){
			columns.put(column.getKey(),column);
			column=null;
		}
		logger.debug("标签"+qName+"内容读取完毕");
		super.endElement(uri,qName);
	}

	/**
	 * 加载文档完毕
	 */
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		logger.info("配置文件/WEB-INF/conf/H2LoadConfig.xml 加载完成");
	}

	public Map<String,H2Table> getH2tables() {
		return h2tables;
	}

	@Override
	public InputSource resolveEntity(String publicId,String systemId)
			throws IOException,SAXException {
		// TODO Auto-generated method stub
		return super.resolveEntity(publicId,systemId);
	}

	@Override
	public void notationDecl(String name,String publicId,String systemId)
			throws SAXException {
		// TODO Auto-generated method stub
		super.notationDecl(name,publicId,systemId);
	}

	@Override
	public void unparsedEntityDecl(String name,String systemId,String notationName) throws SAXException {
		// TODO Auto-generated method stub
		super.unparsedEntityDecl(name,systemId,notationName);
	}

	@Override
	public void setDocumentLocator(Locator locator) {
		// TODO Auto-generated method stub
		super.setDocumentLocator(locator);
	}

	@Override
	public void startPrefixMapping(String prefix,String uri)
			throws SAXException {
		// TODO Auto-generated method stub
		super.startPrefixMapping(prefix,uri);
	}

	@Override
	public void endPrefixMapping(String prefix) throws SAXException {
		// TODO Auto-generated method stub
		super.endPrefixMapping(prefix);
	}

	@Override
	public void characters(char[] ch,int start,int length)
			throws SAXException {
		// TODO Auto-generated method stub
		super.characters(ch,start,length);
	}

	@Override
	public void ignorableWhitespace(char[] ch,int length)
			throws SAXException {
		// TODO Auto-generated method stub
		super.ignorableWhitespace(ch,length);
	}

	@Override
	public void processingInstruction(String target,String data)
			throws SAXException {
		// TODO Auto-generated method stub
		super.processingInstruction(target,data);
	}

	@Override
	public void skippedEntity(String name) throws SAXException {
		// TODO Auto-generated method stub
		super.skippedEntity(name);
	}

	@Override
	public void warning(SAXParseException e) throws SAXException {
		// TODO Auto-generated method stub
		super.warning(e);
	}

	@Override
	public void error(SAXParseException e) throws SAXException {
		// TODO Auto-generated method stub
		super.error(e);
	}

	@Override
	public void fatalError(SAXParseException e) throws SAXException {
		// TODO Auto-generated method stub
		super.fatalError(e);
	}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读