让我们先来聊聊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.xml配置文件一般是放在tomcat的WEB-INF/classes目录下。
我们编制一个Java程序直接读取,将dbhost、dbuser、dbpassword提取出来供其他程序访问数据库用。
目前使用SAX比较的多,与DOM主要区别是SAX是一行一行读取XML文件进行分析,适合比较大文件,DOM是一次性读入内存,显然不能对付大文件这里我们使用SAX解析,由于SAX解析器不断在发展,网上有不少文章是针对老版本的。如果你使用JDK1.4 ,可以参考使用SAX处理XML文档一文。这里的程序是根据其改进并且经过实践调试得来的。
对上面myenv.xml读取的Java程序:
上面的这个解析程序比较简单吧? 其实解析XML就是这么简单。
现在我们已经将dbhost、dbuser、dbpassword的值localhost、sqlname、username、password提取了出来。但是这只是在在解析器内部,我们的程序还不能访问。需要再编制一个程序。注意这里需要将myenv.xml与ConfigParser.class置于同一目录之下。
由于我们的XML文件是使用最简单的形式,因此解析器相对简单,但是这已经足够对付我们的配置文件了。判断一个程序系统的先进性,我们先看看他的配置文件,如果还在使用老套的xxx=123这样类似.ini的文件,我们也许会微微一笑,他又落伍了.....