利用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;
}
}
}
利用SAX解析读取XML文件的更多相关文章
- 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)
原文:分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要) XML文件 <?xml version="1.0"?> <student ...
- Java用jdom.jar解析读取XML文件信息
jdom.jar下载地址1:http://www.jdom.org/downloads/ 下载地址2:http://www.java2s.com/Code/Jar/j/Downloadjdomjar. ...
- JavaScript 解析读取XML文档 实例代码(转)
JavaScript解析读取XML文件,主要就是加载并解析XML文件,然后就可以测试解析的XML文件的内容,打印输出来. 在线演示:http://demo.jb51.net/js/2012/readx ...
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .
背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...
- JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取 InputStream DocumentBuilderFactory Element Node 前言 最 ...
- 使用DOM4J解析XMl文件与读取XML文件
XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...
- 使用Pull解析器生成XML文件和读取xml文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- JAVA读取XML文件数据
XML文档内容如下: <?xml version="1.0" encoding="UTF-8"?> <root> <field t ...
- (转) 读取xml文件转成List<T>对象的两种方法
读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法,加上自己知道的另一种实现方法. 就以一个简单的xml做例子. xml格 ...
随机推荐
- 让mysql返回的结果按照传入的id的顺序排序
比如id为 1,3,5,44,66,32,21,6 那么返回的结果顺序也是这个顺序 $sql = "select * from ".$this->tableName(). ...
- 12 mysql性能抖动
12 mysql性能抖动 sql语句为什么变”慢”了 在介绍WAL机制时,innodb在处理更新语句的时候,只做了写日志这一个磁盘操作,就是redo log,在更新内存写完redo log之后,就返回 ...
- Jenkins - 【转】高效插件推荐
特别说明:本文是在原文基础上的改写和添加,但总体不影响原文表达,特此说明. 原文链接 - Jenkins 高效插件推荐 | 运维生存时间 前言 开源版本的Jenkins具有三大能力: Master-S ...
- 【一个开发设想】开发一个游戏向时间管理APP
什么是游戏向时间管理呢? 首先我们要做的是时间管理.为了更好地利用时间,摆脱拖延症. 其次是游戏向.就是利用主线任务.支线任务.每日任务的方式展现,一般来讲,没人会讨厌玩游戏.更何况玩这个“游戏”是为 ...
- SparkCore的性能优化
1.广播变量 1.1. Spark提供的Broadcast Variable,是只读的,并且在每个节点上只会有一份副本,而不会为每个task都拷贝一份副本 1.2.它的最大作用,就是减少变量到各个节点 ...
- react native 传值方式之 :子组件通过调用 其父组件传来的方法 传值回其父组件
- AE调用GP工具(创建缓冲区和相交为例)
引用 Geoprocessing是ArcGIS提供的一个非常实用的工具,借由Geoprocessing工具可以方便的调用ArcToolBox中提供的各类工具,本文在ArcEngine9.2平台环境下总 ...
- webhooks动态更新配置
config server 项目中加入 monitor依赖 <dependency> <groupId>org.springframework.cloud</groupI ...
- Misc题目
@freebuff教程https://www.freebuf.com/column/196815.html @巅峰极客wp https://www.anquanke.com/post/id/18914 ...
- FTL2
ABSTACT 1.NAND flash memory (主要缺点): (1)partial page updates (2)general-purpose cache usually does n ...