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 localName, 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, localName, 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 publicId,
String systemId, String notationName) throws SAXException {
// TODO Auto-generated method stub
super.unparsedEntityDecl(name, publicId, 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 start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.ignorableWhitespace(ch, start, 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);
}
}