📄 parsexml.java
字号:
/**
* $Id: ParseXML.java,v 1.1 2007/11/26 07:50:08 administrator Exp $
*/
package com.tjsoft.xml.parse;
import java.net.URL;
import java.util.Properties;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.util.Map;
import java.util.HashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 2006-06-17 Alex修改此类,在不改变原来类结构和方法的基础上,增加缓存机制,
* 避免频繁的解析XML,减少系统开销。
* 此类是先程非安全的,但只有读取功能,因此不必进行同步处理。
*
*
* @author Administrator
* @author Alex Lin(alex@opoo.org)
* TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class ParseXML
{
private static final Log log = LogFactory.getLog(ParseXML.class);
/**
* Properties cache
*/
private static Map cache = new HashMap();
//定义一个Properties 用来存放 dbhost dbuser dbpassword的值
private Properties props;
//这里的props
public Properties getProps()
{
return this.props;
}
public Object getPropertiesValue(String key)
{
return (getProps() == null || key == null) ? null : getProps().get(
key.toLowerCase());
}
public void parse(String filename) throws Exception
{
Properties p = findPropsFromCache(filename);
if (p != null)
{
props = p;
}
else
{
props = parseXML(filename);
putPropsToCache(filename, props);
}
}
private Properties parseXML(String filename) throws Exception
{
log.info("Parsing XML: " + filename);
//将我们的解析器对象化
ConfigParser handler = new ConfigParser();
//获取SAX工厂对象
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
//获取SAX解析
SAXParser parser = factory.newSAXParser();
//得到配置文件myenv.xml所在目录. tomcat中是在WEB-INF/classes
//下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义
URL confURL = this.getClass().getResource(filename);
try
{
//将解析器和解析对象myenv.xml联系起来,开始解析
parser.parse(confURL.toString(), handler);
//获取解析成功后的属性 以后 我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了
return handler.getProps();
}
finally
{
factory = null;
parser = null;
handler = null;
}
}
private static Properties findPropsFromCache(String filename)
{
return (Properties) cache.get(filename);
}
private static void putPropsToCache(String filename, Properties props)
{
cache.put(filename, props);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -