`
aladdin_leon
  • 浏览: 118831 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

XML配置文件的读取处理

阅读更多

     让我们先来聊聊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配置文件就可以正常运行。

  1. <myenv>  
  2.     <datasource>  
  3.          <dbhost>localhostdbhost>  
  4.          <dbname>sqlnamedbname>  
  5.          <dbuser>usernamedbuser>  
  6.          <dbpassword>passworddbpassword>  
  7.     datasource>  
  8. 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程序:

  1. import org.xml.sax.Attributes;   
  2. import org.xml.sax.helpers.DefaultHandler;   
  3. import org.xml.sax.SAXException;    
  4. import java.util.Properties;   
  5.     
  6. //使用DefaultHandler的好处是不必陈列出所有方法   
  7. public class ConfigParser extends DefaultHandler {   
  8.       //定义一个Properties用来存放dbhost、dbuser、dbpassword的值   
  9.       private Properties props;   
  10.       private String currentSet;   
  11.       private String currentName;   
  12.       private StringBuffer currentValue = new StringBuffer();   
  13.       //构建器初始化props   
  14.       public ConfigParser() {   
  15.           this.props = new Properties();   
  16.       }   
  17.       public Properties getProps() {   
  18.           return this.props;   
  19.       }   
  20.       //定义开始解析元素的方法. 这里是将<xxx></xxx>中的名称xxx提取出来.   
  21.       public void startElement(String uri, String localName, String qName, Attributes attributes)    
  22.                       throws SAXException {   
  23.           currentValue.delete(0, currentValue.length());   
  24.           this.currentName =qName;   
  25.       }   
  26.       //这里是将<xxx></xxx>之间的值加入到currentValue   
  27.       public void characters(char[] ch, int start, int length) throws SAXException {    
  28.           currentValue.append(ch, start, length);   
  29.       }   
  30.       //在遇到结束后,将之前的名称和值一一对应保存在props中   
  31.       public void endElement(String uri, String localName, String qName) throws SAXException {   
  32.           props.put(qName.toLowerCase(), currentValue.toString().trim());   
  33.       }   
  34. }  

      上面的这个解析程序比较简单吧? 其实解析XML就是这么简单。
      现在我们已经将dbhost、dbuser、dbpassword的值localhost、sqlname、username、password提取了出来。但是这只是在在解析器内部,我们的程序还不能访问。需要再编制一个程序。注意这里需要将myenv.xml与ConfigParser.class置于同一目录之下。       

  1. import java.util.Properties;   
  2. import javax.xml.parsers.SAXParser;   
  3. import javax.xml.parsers.SAXParserFactory;   
  4. import java.net.URL;    
  5.   
  6. public class ParseXML{   
  7.       //定义一个Properties 用来存放 dbhost dbuser dbpassword的值   
  8.       private Properties props;   
  9.       public Properties getProps() {   
  10.           return this.props;   
  11.       }   
  12.       public void parse(String filename) throws Exception {   
  13.             //将我们的解析器对象化   
  14.             ConfigParser handler = new ConfigParser();   
  15.             //获取SAX工厂对象   
  16.             SAXParserFactory factory = SAXParserFactory.newInstance();   
  17.             factory.setNamespaceAware(false);   
  18.             factory.setValidating(false);   
  19.             //获取SAX解析   
  20.             SAXParser parser = factory.newSAXParser();   
  21.             //得到配置文件myenv.xml所在目录. tomcat中是在WEB-INF/classes   
  22.             //下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替   
  23.             URL confURL = ConfigParser.class.getResource(filename);   
  24.             try {   
  25.                   //将解析器和解析对象myenv.xml联系起来,开始解析    
  26.                    parser.parse(confURL.toString(), handler);    
  27.                   //获取解析成功后的属性 以后我们其他应用程序   
  28.                   //只要调用本程序的props就可以提取出属性名称和值了   
  29.                    props = handler.getProps();   
  30.             } finally {   
  31.                    factory=null;   
  32.                    parser=null;   
  33.                    handler=null;   
  34.             }   
  35.       }   
  36. }   

     由于我们的XML文件是使用最简单的形式,因此解析器相对简单,但是这已经足够对付我们的配置文件了。判断一个程序系统的先进性,我们先看看他的配置文件,如果还在使用老套的xxx=123这样类似.ini的文件,我们也许会微微一笑,他又落伍了.....

 

分享到:
评论

相关推荐

    JAVA高手解析XML配置文件的读取操作.pdf

    本文对 Java 中的 XML 配置文件读取操作进行了详细的讲解,并提供了一个使用 SAX 解析器读取 XML 配置文件的示例程序,对 Java 开发者来说非常实用。 知识点: 1. XML 配置文件在 Java 开发中的应用 2. DOM 和 SAX...

    c++读取XML配置文件

    c++读取XML配置文件C++中并没有操作XML文件的标准库,因此大家需要使用各自熟悉的XML库来解决XML文件的读取与写入。XML的一个重要用途是作为程序的配置文件,存储程序运行相关的各种数据。本文总结了使用libxml2库来...

    C#读取XML配置文件

    总结,C#读取XML配置文件主要涉及加载文件、查询节点、处理查询结果以及异常处理。根据项目的规模和需求,可以选择不同的方法来实现这一功能。对于简单需求,可以直接使用`XmlDocument`或`XDocument`;对于更复杂的...

    使用Java读取XML配置文件

    使用 Java 读取 XML 配置文件 Java 语言和 XML 技术可以说是黄金组合,网上已经有很多文章介绍 XML 在电子商务中的数据交换的作用。但是在平时系统开发中,我们不一定都用到数据交换,是否无法使用 XML?当然不是...

    读取xml配置文件的flash导航菜单

    在这个“读取xml配置文件的flash导航菜单”项目中,开发人员创建了一个动态的Flash菜单系统,该系统能够从外部XML文件中获取其配置信息,从而实现菜单项的动态加载和更新。下面将详细解释这个技术实现的各个方面。 ...

    Java中XML配置文件的读取(sax).doc

    Java中XML配置文件的读取(SAX) XML配置文件是Java开发中常用的配置文件格式,特别是在J2EE项目中。XML文件可以存储配置信息,并且易于维护和修改。然而,在Java中读取XML配置文件成了一个需要解决的问题。本文将...

    J2EE中XML配置文件的读取处理

    总之,J2EE中XML配置文件的读取处理涉及选择合适的解析器,如SAX,以及编写处理XML事件的`DefaultHandler`子类。这使得程序能够灵活地处理和更新配置,而不必修改代码,增强了软件的可维护性和适应性。在实际开发中...

    xml.zip_matlab读取xml文件实例_xml文件读取

    XML(eXtensible Markup Language)是一种用于存储和传输数据的通用格式,广泛应用于软件开发、数据交换和配置文件等领域。在MATLAB中处理XML文件是常见的任务,尤其是在需要与其它系统进行数据交互或者处理结构化...

    LabVIEW 写入与读取配置文件

    2. .xml 文件读取:通过"Load XML Document"函数加载.xml文件,然后使用"Find Node"或"Get Child Nodes"找到所需的数据节点,再用"Get Node Value"提取信息。 四、实际应用示例 在实际项目中,可能需要在程序启动...

    通过实例说话,利用tinyxml对配置文件进行读取操作

    在学习过程中,可以结合这个实例逐步理解和实践每个步骤,加深对TinyXML库的理解,从而提高处理XML配置文件的能力。 总结起来,TinyXML提供了一种简单易用的方式来处理XML文件,特别适合用于读取和写入配置文件。...

    根据XML配置文件自动生成窗体控件

    `XmlConfigRead`可能是项目中的一个类,负责读取和解析XML配置文件。它可能包含如下的方法: ```csharp public class XmlConfigRead { public List&lt;ControlInfo&gt; ParseConfig(string filePath) { // 读取XML文件...

    js读取xml文件并获取文件内容

    ### JS读取XML文件并获取文件内容 #### 知识点概述 在现代Web开发中,JavaScript(简称JS)常被用于处理各种数据格式,包括XML。XML(可扩展标记语言)是一种常用的标记语言,主要用于结构化数据的存储与传输。...

    JAVA项目数据库连接XML配置文件.docx

    JAVA项目数据库连接XML配置文件 在 Java 项目中,数据库连接的配置是一个非常重要的步骤,为了方便用户配置数据库,使用 XML 配置文件可以灵活地修改数据连接。本文将详细介绍如何使用 XML 配置文件来连接数据库。 ...

    SpringMVC 中xml文件的读取与显示

    在SpringMVC中,XML配置文件扮演着关键角色,它们定义了组件的装配方式,如控制器、服务、数据源等。这篇内容将深入探讨SpringMVC中XML文件的读取与显示,并结合JSP页面的实现。 首先,我们需要理解SpringMVC的配置...

    Spring Boot多模块配置文件读取

    总之,Spring Boot的多模块配置文件读取策略旨在提高项目的可扩展性和可维护性。通过合理的配置文件组织和使用`@ConfigurationProperties`,我们可以有效地管理各模块的配置,同时保持代码的清晰和整洁。理解并熟练...

    config4j 用于简化XML配置文件读取的

    **config4j** 是一个Java库,专门设计用于简化XML配置文件的读取和管理。在许多Java应用程序中,XML文件常被用作配置数据的存储,因为它们提供了结构化的数据表示方式,易于人类阅读和编写。然而,直接操作XML文件...

    XML配置文件连接Oracle数据库

    5. **解析XML配置**:在应用程序中,你需要使用Java的DOM或SAX解析器来读取和解析XML配置文件。获取到连接信息后,可以使用`java.sql.DriverManager`类的`getConnection()`方法建立数据库连接。 6. **建立数据库...

    C# 保存和读取XML配置文件

    应用程序中,经常需要保存一些用户的设置...这个代码就是用C#写的保存和读取程序运行目录下的XML配置文件的程序,配置文件也会自动生成,很灵活的。 共享给大家,大家可以很方便的调用,然后保存和读取自己的程序设置。

Global site tag (gtag.js) - Google Analytics