zoukankan      html  css  js  c++  java
  • 利用SAX解析读取XML文件

    xml     这是我的第一个BLOG,今天在看《J2EE应用开发详解》一书,书中讲到XML编程,于是就按照书中的步骤自己测试了起来,可是怎么测试都不成功,后来自己查看了一遍源码,发现在读取XML文件的位置时有误,于是进行了更改,还真行了,心中涌出一中成就感,现将源码贴出来与给位分享:

     使用XML文件连接MYSQL数据库,database.conf.xml文件如下:

    <database-conf>
    <datasource>
     <driver>com.mysql.jdbc.Driver</driver>
     <url>jdbc:mysql://127.0.0.1:3306/j2ee14</url>
     <user>bn</user>
     <password>bn</password>
    </datasource>
    </database-conf>

    新建一个Handler,用来解析该XML配置(ConfigParser.java) :

    package com.j2ee14.ch4;
    import  org.xml.sax.Attributes;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.SAXException;

    import java.util.Properties;

    /**
     *ConfigParser扩展了DefaultHandler,它用于获得数据库的连接属性
     */
    public class ConfigParser extends DefaultHandler
    {
        //定义一个Properties 用来存放属性值
     private Properties props;
     private String currentName;
     private StringBuffer currentValue =new StringBuffer();
     
        //构建器初始化props
     
     public ConfigParser()
     {
      this.props=new Properties();
     }
     public Properties getProps()
     {
      return this.props;
     }
     
         //定义开始解析元素的方法. 这里是将<xxx>中的名称xxx提取出来
     
     public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException
     {
      currentValue.delete(0,currentValue.length());
      this.currentName=qName;
     }
     
        //这里是将<xxx></xxx>之间的值加入到currentValue
     
     public void characters(char[] ch, int start, int length) throws SAXException {

     currentValue.append(ch, start, length);

     }

        /**
         *把XML配置文件的中相关的属性保存到Properties对象中
         */

     public void endElement(String uri,String localName,String qName)throws SAXException
     {
      props.put(qName.toLowerCase(),currentValue.toString().trim());
     }
    }

    用来解析XML的类,其他程序通过这个类来获得数据库的连接属性(ParseDatabaseConfig
    .java):

    package com.j2ee14.ch4;

    import java.util.Properties;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;

    /**
     *其它程序通过ParseDatabaseConfig来获得数据库的配置信息,
     *这样使得类之间的耦合松散
     */
    public class ParseDatabaseConfig
    {
        //定义一个Properties 用来存放属性值
     private Properties props;
     
     public Properties getProps()
     {
      return this.props;
     }
     /**
      *解析XML配置文件,把属性保存起来
      */
     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();
     
      try
      {
                //将解析器和解析对象xml联系起来,开始解析
       parser.parse(filename,handler);
      
                //获取解析成功后的属性
       props=handler.getProps();
      }
      finally
      {
       factory=null;
       parser=null;
       handler=null;
      }
     }

    }

  • 相关阅读:
    Java中List集合的常用方法
    hibernate的多对多配置
    hibernate的一对多配置
    Github删除账号方法
    eclipse向上/下复制一行(或者多行)的快捷键失效的基本解决方法
    eclipse格式化代码快捷键失效解决的一个基本方法
    hibernate配置文件的详解
    hibernate——第一次简单的使用
    java中TreeMap集合的常用方法
    java中Map集合的常用方法
  • 原文地址:https://www.cnblogs.com/zjm-1/p/9350385.html
Copyright © 2011-2022 走看看