快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰app是真的吗:XML配置文件的读取处理



XML设置设置设备摆设摆设文件的读取处置惩罚

板桥里人 jdon.com 2002/2

Java和XML是黄金组合,网上已经有很多文章先容,XML作为电子商务中数据互换,已经有其弗成替代的感化,然则在日常平凡系统开拓中,我们不必然都用到数据互换,是不是无法应用XML了?

当然不是,现在已经有一个新趋势,java法度榜样的设置设置设备摆设摆设文件都开始应用XML款式,曩昔是应用类似windows的INI款式.(Java中也有Propertiesy这样的类专门处置惩罚这样的属性设置设置设备摆设摆设文件).应用XML作为Java的设置设置设备摆设摆设文件有很多好处,从Tomcat的安装设置设置设备摆设摆设文件和J2ee的设置设置设备摆设摆设澳门新葡亰app是真的吗文件中,我们已经看到XML的普遍利用,让我们也跟随盛行趋势用XML武装起来.

现在关键是若何读取XML设置设置设备摆设摆设文件?有好几种XML解析器:主要有DOM和SAX ,这些差别网上文章先容很多.

在apache的XML项目组中,今朝有Xerces Xalan Cocoon几个开拓XML相关技巧的project.Tomcat本身应用的是 Sun 的 JAXP,而其XSL Taglib project中应用Xerces解析器.

好了,上面都是对照烦人的理论问题,照样从速切入XML的设置设置设备摆设摆设文件的读取吧.

在我们的法度榜样中,平日要有一些根据主机情况确定的变量.比如数据库造访用户名和密码,不合的主机可能设澳门新葡亰app是真的吗置不一样.只要变动XML设置设置设备摆设摆设文件,就可以正常运行.

localhost

sqlname

username

password

上面这个myenv.xml设置设置设备摆设摆设文件一样平常是放在tomcat的WEB-INF/classes目录下.

我们体例一个Java法度榜样直接读取,将dbhost dbuser dbpassword提掏出来供其他法度榜样造访数据库用.

今朝应用SAX对照的多,与DOM主要差别是 SAX是一行一行读取XML文件进行阐发,得当对照大年夜文件,DOM是一次性读入内存,显然不能对于大年夜文件.这里我们应用SAX解析,因为SAX解析器赓续在成长,网上有不少文章是针对老版本的.假如你应用JDK1.4 ,可以参考 应用SAX处置惩罚XML文档 一文.这里的法度榜样是根据其改进并且颠末实践调试得来的.

对上面myenv.xml读取的Java法度榜样:

import org.xml.sax.Attributes;

import org.xml.sax.helpers.DefaultHandler;

import org.xml.sax.SAXException;

import java.util.Properties;

//应用DefaultHandler的好处 是 不必陈设出所有措施,

public class ConfigParser extends DefaultHandler {

////定义一个Properties 用来寄放 dbhost dbuser dbpassword的值

private Properties props;

private String currentSet;

private String currentName;

private Stri澳门新葡亰app是真的吗ngBuffer currentValue = new StringBuffer();

//构建器初始化props

public ConfigParser() {

this.props = new Properties();

}

public Properties getProps() {

return this.props;

}

//定义开始解析元素的措施. 这里是将中的名称xxx提掏出来.

public void startElement(String uri, String localName, String澳门新葡亰app是真的吗 qName, Attributes attributes)

throws SAXException {

currentValue.delete(0, currentValue.length());

this.currentName =qName;

}

//这里是将之间的值加入到currentValue

public void characters(char[] ch, int start, int length) throws SAXException {

currentValue.append(ch, start, length);

}

//在碰到停止后,将之前的名称和值逐一对应保存在props中

public void endElement(String uri, String localName, String qName) throws SAXException {

props.put(qName.toLowerCase(), current澳门新葡亰app是真的吗Value.toString().trim());

}

}

上面的这个解析法度榜样对照简单吧? 着实解析XML便是这么简单.

现在我们已经将dbhost dbuser dbpassword的值localhost sqlname username password提取了出来.然则这只是在在解析器内部,我们的法度榜样还不能造访.必要再体例一个法度榜样.

import java.util.Properties;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import java.net.URL;

public class ParseXML{

//定义一个Properties 用来寄放 dbhost dbuser dbpassword的值

private Properties props;

//这里的props

public Properties getProps() {

return this.props;

}

public void parse(String filename) throws Exception {

//将我们的解析器工具化

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 = BeansConstants.class.getClassLoader().getResource(filename);

try

{

//将解析器和解析工具myenv.xml联系起来,开始解析

parser.parse(confURL.toString(), handler);

//获取解析成功后的属性 今后 我们其他利用法度榜样只要调用本法度榜样的props就可以提掏出属性名称和值了

props = handler.getProps();

}finally{

factory=null;

parser=null;

handler=null;

}

}

}

因为我们的XML文件是应用最简单的形式 ,是以解析器相对简单,然则这已经足够对于我们的设置设置设备摆设摆设文件了.

判断一个法度榜样系统的先辈性,我们先看看他的设置设置设备摆设摆设文件,假如还在应用老套的xxx=123 这样类似.ini的文件,

我们大概会微微一笑,他又失队了.....

您可能还会对下面的文章感兴趣: