待读取的XML文件datasource.xml:
<?xml version="1.0"?>
<datasources>
<datasource>
<name>mysqldatasource</name>
<driver>com.jdbc.mysql.Driver</driver>
<url>jdbc:mysql://localhost:3306/test</url>
<username>root</username>
<password>1234</password>
</datasource>
<datasource>
<name>oracledatasource</name>
<driver>oracle.jdbc.driver.oracledriver</driver>
<url>jdbc:oracle:thin:@localhost:1521:orcl</url>
<username>scott</username>
<password>tiger</password>
</datasource>
</datasources>
此xml文件分2层结构,分别为:
<datasources>节点 其下包含2个<datasource>节点
<datasource>节点,其下包含各种信息节点 : 如:<name> 、<url>等。
我们的操作目标是把datasource中的信息节点的内容提取出来。
把每个<datasource>看做为一个对象,<datasource>中信息节点的内容为对象中的元素。
设定一个类Datasource.java 其内容如下:
public class DataSource {
private String name;
private String driver;
private String url;
private String username;
private String password;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String toString() {
return "DataSource : " + "name : " + name + " Driver : " + driver
+ " URL : " + url + " Username : " + username + " Password : "
+ password;
}
}
解析这个XML文件,新建一个类SampleDigester.java:
使用addCallMethod方法,映射XML所对应的节点与这个Call method的参数即可,这个call method将读取的一个标签内所有的值存入对象,然后再存入一个集合中.
import java.io.IOException;
import java.util.Vector;
import org.apache.commons.digester.Digester;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.SAXException;
/**
* class SampleDigester
*
* @author xiaoqing.yu
*/
public class SampleDigester {
/** log */
protected static final Log log = LogFactory.getLog(SampleDigester.class);
/** dataSources */
private Vector<DataSource> dataSources;
/**
* @param args
*/
public static void main(String[] args) {
SampleDigester sd = new SampleDigester();
sd.digester();
log.info(sd.toString());
}
private void digester() {
Digester digester = new Digester();
setDataSources(new Vector<DataSource>());
// 把当前对象压入到digester栈中。
digester.push(this);
/* 设定解析此xml文件的规则 */
// 将XML文件解析所对应的方法.this.addDataSource();参数个数为5个.
digester.addCallMethod("datasources/datasource", "addDataSource", 5);
// 对应方法addDataSource参数1,final String name;
digester.addCallParam("datasources/datasource/name", 0);
digester.addCallParam("datasources/datasource/driver", 1);
digester.addCallParam("datasources/datasource/url", 2);
digester.addCallParam("datasources/datasource/username", 3);
digester.addCallParam("datasources/datasource/password", 4);
try {
digester.parse("datasource.xml");
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
public void addDataSource(final String name, final String driver,
final String url, final String username, final String password) {
DataSource dataSource = new DataSource();
dataSource.setName(name);
dataSource.setDriver(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
getDataSources().add(dataSource);
}
/**
* @return the dataSources
*/
public Vector<DataSource> getDataSources() {
return dataSources;
}
/**
* @param dataSources
* the dataSources to set
*/
public void setDataSources(Vector<DataSource> dataSources) {
this.dataSources = dataSources;
}
public String toString() {
String newline = System.getProperty("line.separator");
StringBuffer buff = new StringBuffer();
if (getDataSources() != null) {
for (DataSource ds : getDataSources()) {
buff.append(newline).append(ds);
}
return buff.toString();
}
return "";
}
}
使用addObjectCreate方法,创建对象映射XML文件的属性对java Bean. 读取完一个对象将对象加入到一个集合中,然后再读取XML文件的下一个标签:
private void digester() {
Digester digester = new Digester();
setDataSources(new Vector<DataSource>());
// 把当前对象压入到digester栈中。
digester.push(this);
// 指明匹配模式和要创建的类
digester.addObjectCreate("datasources/datasource", DataSource.class);
// 设置对象属性,与xml文件对应,不设置则是默认.
digester.addBeanPropertySetter("datasources/datasource/name", "name");
digester.addBeanPropertySetter("datasources/datasource/driver", "driver");
digester.addBeanPropertySetter("datasources/datasource/url");
digester.addBeanPropertySetter("datasources/datasource/username");
digester.addBeanPropertySetter("datasources/datasource/password");
// 当移动到下一个标签中时的动作
digester.addSetNext("datasources/datasource", "addDataSource");
try {
digester.parse("datasource.xml");
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
public void addDataSource(final DataSource ds) {
getDataSources().add(ds);
}
使用addRule方法来解析datasource.xml:
private void digester() {
Digester digester = new Digester();
setDataSources(new Vector<DataSource>());
// 把当前对象压入到digester栈中。
digester.push(this);
Rule objectCreate = new ObjectCreateRule(DataSource.class);
digester.addRule("datasources/datasource", objectCreate);
digester.addRule("datasources/datasource", new SetNextRule(
"addDataSource"));
digester.addRule("datasources/datasource/name", new CallMethodRule(
"setName", 0, new Class[] { String.class }));
digester.addRule("datasources/datasource/driver", new CallMethodRule(
"setDriver", 0, new Class[] { String.class }));
digester.addRule("datasources/datasource/url", new CallMethodRule(
"setUrl", 0, new Class[] { String.class }));
digester.addRule("datasources/datasource/username", new CallMethodRule(
"setUsername", 0, new Class[] { String.class }));
digester.addRule("datasources/datasource/password", new CallMethodRule(
"setPassword", 0, new Class[] { String.class }));
try {
digester.parse("datasource.xml");
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
打印出来的结果应该是:
INFO:
DataSource : name : mysqldatasource Driver : com.jdbc.mysql.Driver URL : jdbc:mysql://localhost:3306/test Username : root Password : 1234
DataSource : name : oracledatasource Driver : oracle.jdbc.driver.oracledriver URL : jdbc:oracle:thin:@localhost:1521:orcl Username : scott Password : tiger
分享到:
相关推荐
4. **解析XML文件**:使用Digester解析XML文件,并根据定义的规则创建Java对象。 #### 五、总结 通过上述介绍可以看出,Digester是一个非常有用的工具,它可以大大简化XML解析的过程。在实际开发中,尤其是处理...
标题“利用commons-digester解析XML”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache ...
这个"digester解析XML文件实例"是一个很好的学习资源,帮助开发者理解如何在实际项目中运用Digester。 首先,我们要了解Digester的基本工作原理。Digester通过定义一系列规则(Rules),当解析到XML文档中特定的...
3. **解析 XML**:创建好 Digester 实例后,使用 `parse` 方法读取 XML 文件并执行预定义的规则。代码示例如下: ```java Digester digester = new Digester(); digester.setValidating(false); // 关闭验证,...
3. **解析XML**:使用 Digester 的 `parse()` 方法读取XML文件,根据预先定义的规则进行处理。 4. **结果处理**:最后,Digester会生成一个对象模型,代表了XML文档的内容。 以下是一个简单的 Digester 使用示例: ...
要使用Digester解析XML文档,首先需要创建一个 `org.apache.commons.digester.Digester` 类的实例,并配置必要的模式和规则,最后调用 `parse()` 方法。 以下是一个简单的示例代码: ```java import org.apache....
5. **解析XML**:最后,使用配置好的 Digester 对象解析XML文件: ```java Root root = null; try (InputStream is = new FileInputStream("path_to_xml_file.xml")) { root = digester.parse(is); } catch ...
这个“digester解析xml必备包.rar”包含了三个关键的jar包,它们是实现Digester功能所必需的。 1. **commons-logging-1.2.jar**:这是Apache Commons Logging库的版本1.2。它提供了一个抽象层,允许开发者使用多种...
这个“org.apache.commons.digester解析XML.rar”压缩包包含了一个测试工程,它演示了如何使用Digester库来解析XML文件并映射到Java对象上。下面将详细介绍这个库的功能、使用方法以及在实际开发中的应用。 1. **...
在示例代码中, DigesterDriver演示了如何配置 Digester来解析XML文件,创建`Catalog`对象并填充其`Book`和`Magazine`子对象,以及相关的`Article`对象。每个元素的属性通过`addBeanPropertySetter()`设置,而对象...
在Java开发中,Struts框架提供了一个强大的工具——Digester,用于解析XML文件并自动创建、配置Java对象。本文将详细介绍如何使用Digester处理具有嵌套结构的XML文档,并通过一个具体的实例——"DigesterXmlTest"来...
本篇文章将详细介绍如何使用`Digester`解析XML,以及在使用过程中需要的依赖库。 首先,`Digester`的核心功能是通过定义规则来将XML元素与Java对象的属性或方法关联,这样在解析XML时,可以自动创建和填充Java对象...
《digester解析XML详解》 在Java开发中,XML作为一种数据交换格式,广泛应用于配置文件、数据传输等场景。为了方便地将XML文档解析为Java对象,Apache组织提供了一个名为Digester的工具库,它允许开发者通过规则来...
Java中的Digester库是Apache Commons项目的一部分,它提供了一种方便的方式来解析XML文档,并将解析结果映射到Java对象模型上。这个库特别适合于创建简单的XML到Java对象的映射,而不需要编写大量的手动解析代码。在...
**使用Digester解析XML并验证** 1. **设置 Digester 规则** 在使用Digester之前,我们需要定义一系列规则,告诉Digester在遇到XML文档的哪些元素时执行什么操作。这些规则通常涉及到创建新对象、设置对象属性或者...
本文将深入探讨如何通过接口和Digester类来解析XML文件,创建并填充Java对象。 首先,理解 Digester 类的工作原理是至关重要的。Digester 是一个规则驱动的XML解析器,它通过匹配XML文档中的模式(Pattern),执行...