让我们先来聊聊XML吧,最初对XML的认识是在2004年,那时看过一本讲怎么样利用XML作网页的书,并没有觉得有什么特别的,好像这个东东和HTML差不多。随后开始接触JAVA Web开发,发现好多的配置文件都是用XML写的,例如Tomcat的web.xml...当然了当时也并没有怎么深入研究,只是知道怎么配置就可以了。后来慢慢接触了框架,发现配置文件几乎没有不是基于XML的,从Structs到Spring,再到Hibernate...于是开始思考这是为什么呢?难道Properties就不能解决问题吗?还没有想明白的时候,又一揽子的关于XML的技术涌进我的视野,Web Service中的SOAP、WSDL,电子商务中的数据交换,XML数据绑定,最近还有号称第三代数据库的DB2 v9的对XML的直接存取和查询...看来XML并没有我想的那么简单当然也没有XML选修课上老师讲得那么乏味,XML今天的在业界的流行就好像英语在世界的流行,但是流行一定是有原因的,就像JAVA的跨平台的大魔咒一样,XML也是平台无关的,无论JAVA还是.NET,或是其他某个还算有名气的平台,都提供了处理XML的API,所以就不会出现.ini和Properties各为其主的情形了。而且XML的格式是用户自由定义的,这样它的表达能力就很强大了,同时也就更加灵活了,能够满足不同的需求,所以这也可能是为什么配置文件大都是XML的原因吧。XML的好处还有很多,不过就需要我们慢慢体会和思考了...
不过说句实话,我和XML的接触大多数是配置文件,有框架的配置文件,有数据库连接的配置文件...那现在就以数据库连接的配置文件为例讨论一下吧。以前习惯将DB连接信息直接写在代码里面,后来项目大了,需要改变了,问题呢,也就来了!如果需要修改DB连接信息,那我就要找到所有的含有DB连接信息的代码进行修改,然后还需要重新编译代码,好麻烦!有没有什么好的解决办法呢?后来慢慢学会把容易发生变化的DB连接信息抽取出来封装在Properties里面,这样需要修改时,只需修改Properties就行了,也不需要重新编译。在后来就是把Properties改为XML的了,也许是我太喜欢赶流行的原因吧,其实DB连接信息配置还没有达到需要XML的地步,不过也好,可以借机学习一下怎么进行XML解析...下面是网上的一篇很好的文章,大家可以借鉴一下。
原文链接:http://www.jdon.com/idea/xml.htm 板桥里人 jdon.com 2002/2
Java和XML是黄金组合,网上已经有很多文章介绍,XML作为电子商务中数据交换,已经有其不可替代的作用,但是在平时系统开发中,我们不一定都用到数据交换,是不是无法使用XML了?当然不是,现在已经有一个新趋势,Java程序的配置文件都开始使用XML格式,以前是使用类似windows的INI格式(Java中也有Propertiesy这样的类专门处理这样的属性配置文件)。使用XML作为Java的配置文件有很多好处,从Tomcat的安装配置文件和J2ee的配置文件中,我们已经看到XML的普遍应用,让我们也跟随流行趋势用XML武装起来。
现在关键是如何读取XML配置文件?有好几种XML解析器:主要有DOM和SAX ,这些区别网上文章介绍很多。
在Apache的XML项目组中,目前有Xerces、Xalan、Cocoon几个开发XML相关技术的project。Tomcat本身使用的是Sun的JAXP,而其XSL Taglib project中使用Xerces解析器。好了,上面都是比较烦人的理论问题,还是赶快切入XML的配置文件的读取吧。在我们的程序中,通常要有一些根据主机环境确定的变量。比如数据库访问用户名和密码,不同的主机可能设置不一样。只要更改XML配置文件就可以正常运行。
- <myenv>
- <datasource>
- <dbhost>localhostdbhost>
- <dbname>sqlnamedbname>
- <dbuser>usernamedbuser>
- <dbpassword>passworddbpassword>
- datasource>
- myenv>
上面这个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;
-
-
- public class ConfigParser extends DefaultHandler {
-
- private Properties props;
- private String currentSet;
- private String currentName;
- private StringBuffer currentValue = new StringBuffer();
-
- public ConfigParser() {
- this.props = new Properties();
- }
- public Properties getProps() {
- return this.props;
- }
-
- public void startElement(String uri, String localName, String qName, Attributes attributes)
- throws SAXException {
- currentValue.delete(0, currentValue.length());
- this.currentName =qName;
- }
-
- public void characters(char[] ch, int start, int length) throws SAXException {
- currentValue.append(ch, start, length);
- }
-
- public void endElement(String uri, String localName, String qName) throws SAXException {
- props.put(qName.toLowerCase(), currentValue.toString().trim());
- }
- }
上面的这个解析程序比较简单吧? 其实解析XML就是这么简单。
现在我们已经将dbhost、dbuser、dbpassword的值localhost、sqlname、username、password提取了出来。但是这只是在在解析器内部,我们的程序还不能访问。需要再编制一个程序。注意这里需要将myenv.xml与ConfigParser.class置于同一目录之下。
- import java.util.Properties;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- import java.net.URL;
-
- public class ParseXML{
-
- private Properties props;
- public Properties getProps() {
- return this.props;
- }
- public void parse(String filename) throws Exception {
-
- ConfigParser handler = new ConfigParser();
-
- SAXParserFactory factory = SAXParserFactory.newInstance();
- factory.setNamespaceAware(false);
- factory.setValidating(false);
-
- SAXParser parser = factory.newSAXParser();
-
-
- URL confURL = ConfigParser.class.getResource(filename);
- try {
-
- parser.parse(confURL.toString(), handler);
-
-
- props = handler.getProps();
- } finally {
- factory=null;
- parser=null;
- handler=null;
- }
- }
- }
由于我们的XML文件是使用最简单的形式,因此解析器相对简单,但是这已经足够对付我们的配置文件了。判断一个程序系统的先进性,我们先看看他的配置文件,如果还在使用老套的xxx=123这样类似.ini的文件,我们也许会微微一笑,他又落伍了.....
分享到:
相关推荐
c++读取XML配置文件C++中并没有操作XML文件的标准库,因此大家需要使用各自熟悉的XML库来解决XML文件的读取与写入。XML的一个重要用途是作为程序的配置文件,存储程序运行相关的各种数据。本文总结了使用libxml2库来...
C#读取XML配置文件 C#读取XML配置文件C#读取XML配置文件C#读取XML配置文件C#读取XML配置文件
JAVA高手解析XML配置文件的读取操作.pdf
使用Java读取XML配置文件
自做的读取xml配置文件的flash导航菜单,带fla源文件。
Java程序的配置文件都开始使用XML格式,以前是使用类似windows的INI格式(Java中也有 Propertiesy这样的类专门处理这样的属性配置文件)。使用XML作为Java的配置文件有很多好处,从Tomcat的安装配置文件和J2ee的配置...
js读取xml文件并获取文件内容
应用程序中,经常需要保存一些用户的设置...这个代码就是用C#写的保存和读取程序运行目录下的XML配置文件的程序,配置文件也会自动生成,很灵活的。 共享给大家,大家可以很方便的调用,然后保存和读取自己的程序设置。
JAVA高手解析XML配置文件的读取操作.doc
JAVA读取数据库的XML配置文件. 前言.虽然现在有HEIBERNATE开源框架做为持久层,可以很好的解决这个问题. 当然,SSH这些开源框架,也必不是人人都得学去用.我个人就喜欢自已写几个常用的类在开发时可以多次使用... 下次...
自做的一个flash导航动画,导航菜单通过xml配置文件读取 、、、、、、、、、、、、、、、、、、、、 sorry,少传了fla源文件,重新传过。
Java中XML配置文件的读取(sax)
配置文件,XML文件读写.rar XML的简单易于在多数应用程序中读/写数据,XML是数据交换的公共语言,很多不同的应用软件都支持XML文件。 配置文件,是一种计算机文件,可以对程序配置初始参数;设置程序初始数据。
利用JAVA代码,读取自己添加的XML配置文件,配置文件可以随便修改,不影响代码
详细的介绍了SpringMVC 中xml文件的读取与显示,附带有jsp页面的实现
这是一个简单实现读取properties、xml格式的配置文件的小案例。虽然实际项目中可能不是这样实现的。作为了解也是不错的。 一、读取properties类型文件 方法一:java.util.ResourceBundle读取properties类型文件; ...
利用tinyxml库来对配置文件进行读取操作,通过具体事例进行分析,给初学者提供了一个很好的学习平台。
用AS2实现的读取XML配置文件,并保存所有详细到数组里