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;
  }
 }

}

利用SAX解析读取XML文件的更多相关文章

  1. 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)

    原文:分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要) XML文件 <?xml version="1.0"?> <student ...

  2. Java用jdom.jar解析读取XML文件信息

    jdom.jar下载地址1:http://www.jdom.org/downloads/ 下载地址2:http://www.java2s.com/Code/Jar/j/Downloadjdomjar. ...

  3. JavaScript 解析读取XML文档 实例代码(转)

    JavaScript解析读取XML文件,主要就是加载并解析XML文件,然后就可以测试解析的XML文件的内容,打印输出来. 在线演示:http://demo.jb51.net/js/2012/readx ...

  4. java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .

    背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...

  5. JAVA读取XML文件并解析获取元素、属性值、子元素信息

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  6. 使用DOM4J解析XMl文件与读取XML文件

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

  7. 使用Pull解析器生成XML文件和读取xml文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  8. JAVA读取XML文件数据

    XML文档内容如下: <?xml version="1.0" encoding="UTF-8"?> <root> <field t ...

  9. (转) 读取xml文件转成List<T>对象的两种方法

    读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法,加上自己知道的另一种实现方法. 就以一个简单的xml做例子. xml格 ...

随机推荐

  1. Python爬虫学习==>第十章:使用Requests+正则表达式爬取猫眼电影

    学习目的: 通过一个一个简单的爬虫应用,初窥门径. 正式步骤 Step1:流程框架 抓取单页内容:利用requests请求目标站点,得到单个页面的html代码,返回结果: 正则表达式分析:根据html ...

  2. 状态压缩DP:蒙德里安的梦想

    代码 #include<bits/stdc++.h> using namespace std; int n,m; long long f[12][1<<11]; bool yy ...

  3. [转帖]Docker常用命令总结

    Docker常用命令总结 http://www.ha97.com/5546.html 发表于: Linux, 互联网, 虚拟化与云计算 | 作者: 博客教主 标签: docker,常用命令,总结 PS ...

  4. 小菜鸟之Oracle数据库

    select * from STUDENT; select * from mark; select * from COURSE; select * from teacher; --注释 select ...

  5. Windows本地运行调试Spark或Hadoop程序失败:ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path

    报错内容 ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOExce ...

  6. codeforces 816B Karen and Coffee (差分思想)

    题目链接 816B Karen and Coffee 题目分析 题意:有个人在学泡咖啡,因此看了很多关于泡咖啡温度的书,得到了n种推荐的泡咖啡温度范围[L1,R1] ,此人将有k种做法推荐的温度记为可 ...

  7. 下载安装npm和cnpm

    下载安装npm http://nodejs.cn/download/ 下载安装cnpm 完成npm的安装后,再安装cnpm https://npm.taobao.org/ 切换源为 taobao 源 ...

  8. 用data的方法获取值的时候,要注意的问题一定要在先封装好

    var art=$(".add-more").prev().find(".content").data("list1"); 我们一定要在aj ...

  9. leecode刷题(31) -- 回文数

    leecode刷题(31) -- 回文数 回文数 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输 ...

  10. Java后端技术面试汇总(第一套)

    面试汇总,整理一波,doc文档可点击[此处下载] 1.基础篇 1.1.Java基础 • 面向对象的特征:继承.封装和多态• final, finally, finalize 的区别• Exceptio ...