今天我介绍一下XML开发利器Digester的应用:
现在市面是真的不好混啊,很多介绍新技术的文章,可是都没有详细的说明。
那么我这篇文章有怎么能吃的开,那当然有妙处了。
首先我这jar包都是在官网上下的,而且绝对不是抄袭的或者别人的东西。我这都是自己工作时候用到的。。给大家分享了。。
那么我们开始了 :
1.要配置我们的j环境,就要去官网:
下面的URL,是common apache官网
http://commons.apache.org/digester/
2.下载bin,上面的是Unix下面的是windows
commons-digester-2.1-bin.tar.gz
commons-digester-2.1-bin.zip
不用说我们用的是2.1版本。。。记好
如果现在就想开发还不行,还少jar包。。。。
3.下载其他jar包
我们点到common apache的首页上 可以看到很多jar包。
我们要下载如下的包:
BeanUtils ,Collections ,Logging
好了这3个jar一定要下来,要不会少类
4.把上面的所有jar包分别配置到工程下面(在这里我想说明一下,最好都是用最新的,因为以上jar包之间会有影响,记住
。。。。。
到这我们的环境就配置好了,那么我们就开始实践了。。。
首先我们可以找到digester-rules.dtd
它在commons-digester.jar .里的org/apache/commons/digester/xmlrules/digester-rules.dtd位置
找到后放到功能根目录下面:
那么我们现在就试验试验
1.创建xml文件
2.输入
<!DOCTYPE digester-rules PUBLIC
"-//Jakarta Apache //DTD digester-rules XML V1.0//EN"
"digester-rules.dtd">
3.验证。。。。会看到dtd文件配置成功。。。
下面我分两种情况给大家分析:
第一种:用到的是java源代码,xml文件只不过是输入数据。。
代码如下:
/**
*
*/
package bean;
import java.util.Vector;
/**
* @author chenhailong
*
*/
public class Members {
private String company;
private Vector<Member> member;
public Members(){
member= new Vector<Member>(5);
}
public void addMember( Member member){
this.member.add( member);
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public Vector<Member> getMember() {
return member;
}
public void setMember(Vector<Member> member) {
this.member = member;
}
}
/**
*
*/
package bean;
/**
* @author chenhailong
*
*/
public class Member {
private String name="";
private int Age=0;
private String Sex="";
private Location Location=null;
private String company="";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
public String getSex() {
return Sex;
}
public void setSex(String sex) {
Sex = sex;
}
public Location getLocation() {
return Location;
}
public void setLocation(Location location) {
Location = location;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
}
上面主要是做bean,bean做好了,那么我们就开始做xml吧
<?xml version="1.0" encoding="GB18030"?>
<Members>
<Member>
<Name>chenhailong</Name>
</Member>
<company>longgao</company>
</Members>
这个是测试代码:
/**
*
*/
package com;
import java.io.File;
import java.io.IOException;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
import bean.Location;
import bean.Member;
import bean.Members;
import junit.framework.TestCase;
/**
* @author chenhailong
*
*/
public class MembersXMLTest extends TestCase{
public static void main(String[] args){
//读取XML文件******全路径*********
File file = new File("E:/JavaPortlet/javaXML/src/member.xml");
//创建Digester对象****************
Digester digester= new Digester();
//对应XML文件的属性***************
digester.addObjectCreate("Members", Members.class);
digester.addObjectCreate("Members/Member", Member.class);
digester.addSetNext("Members/Member", "addMember");
digester.addBeanPropertySetter("Members/Member/Name","name");
digester.addBeanPropertySetter("Members/company","company");
try {
Members members = (Members)digester.parse(file);
System.out.println(members.getCompany());
System.out.println((members.getMember().elementAt(0).getName()));
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
好了 以上主要是用java来做,我们刚开始时用的可是dtd啊 现在可要用了
bean没有变,bean本来就是先定义好的
接下来就是xml文件了。
<?xml version="1.0" encoding="UTF-8"?>
<members>
<member>
<id>1</id>
<name>chenhailong</name>
<age>18</age>
<sex>male</sex>
<company>longao</company>
<location>shanghai</location>
</member>
<member>
<id>2</id>
<name>caojia</name>
<age>18</age>
<sex>female</sex>
<company>student</company>
<location>dalian</location>
</member>
</members>
然后就是我们的rule了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE digester-rules PUBLIC
"-//Jakarta Apache //DTD digester-rules XML V1.0//EN"
"digester-rules.dtd">
<digester-rules>
<pattern value="members">
<object-create-rule classname="bean.Members" />
<pattern value="member">
<object-create-rule classname="bean.Member" />
<bean-property-setter-rule pattern="id"/>
<bean-property-setter-rule pattern="name"/>
<bean-property-setter-rule pattern="age"/>
<bean-property-setter-rule pattern="sex"/>
<bean-property-setter-rule pattern="company"/>
<bean-property-setter-rule pattern="location"/>
<set-next-rule methodname="addMember" />
<set-properties-rule />
</pattern>
</pattern>
</digester-rules>
好了 配置成功了
那么我们接下俩就是test了:
/**
*
*/
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.apache.commons.logging.Log;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import bean.Members;
/**
* @author chenhailong
*
*/
public class JavaXMLTest {
/**
* @param args
*/
public static void main(String[] args) {
File file = new File(
"E:\\JavaPortlet\\JavaXMLConclusion\\src\\Members.xml");
File rulefile = new File(
"E:\\JavaPortlet\\JavaXMLConclusion\\src\\Members-rule.xml");
InputStream inputStream = null;
try {
inputStream = new FileInputStream(rulefile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
InputSource rulesSouce = new InputSource();
rulesSouce.setByteStream(inputStream);
Digester digester = DigesterLoader.createDigester(rulesSouce);
try {
Members members = (Members) digester.parse(file);
for(int i=0;i<members.getList().size();i++){
System.out.println(members.getList().get(i).getId());
System.out.println(members.getList().get(i).getName());
System.out.println(members.getList().get(i).getAge());
System.out.println(members.getList().get(i).getSex());
System.out.println(members.getList().get(i).getCompany());
System.out.println(members.getList().get(i).getLocation());
System.out.println(members.getList().size());
}
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
到这里我们的介绍就结束了,如果有什么问题请给我留言。。。
分享到:
相关推荐
Java XML解析中的Digester是一个强大的工具,用于将XML文档转换为Java对象。它最初是为了处理Struts框架的配置文件而设计的,随着时间的发展,它成为一个轻量级且高效的框架,专注于单向转换,即从XML到Java对象。...
本示例将详细介绍如何使用Apache Commons Digester进行XML解析。 Apache Commons Digester的核心概念是规则(Rule),这些规则定义了XML元素与Java对象之间的映射关系。通过一系列规则,Digester能够自动地读取XML...
4. **配置Digester规则**:设置 Digester 规则以将XML解析为Java对象。这些规则通常在程序启动时初始化: ```java Digester digester = new Digester(); digester.setRulesValidation(true); // 启用规则验证 // ...
总的来说,Digester 是一个功能强大的XML解析工具,能够简化Java应用中XML数据的处理。通过合理地利用其规则和特性,可以高效地将XML文档转化为易于操作的对象模型,极大地提高了开发效率。在实际项目中,了解并熟练...
### Digester解析XML知识点详解 #### 一、Digester简介 **Digester** 是Apache Commons项目中的一个子项目,主要用于简化XML文档的解析工作。...对于需要频繁解析XML的应用场景来说,Digester是一个非常实用的选择。
在提供的博客链接中,作者可能详细讲解了如何使用 Digester 实现具体的XML解析案例,包括但不限于以下方面: - 如何配置 Digester 规则 - 如何处理嵌套元素和递归结构 - 如何处理命名空间(如果XML文档包含) - ...
本篇文章将深入探讨XML解析的原理以及在Java中的具体应用。 1. XML解析原理: XML解析主要分为两种方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器会将整个XML文档加载到内存中,形成一...
2. **设置解析器**:将XML解析器(如SAXParser)与Digester关联,以便在解析XML时触发已设定的规则。 3. **解析XML**:使用`parse`方法,传入XML文件的输入流,开始解析过程。 4. **处理结果**:解析完成后,根...
本文将深入探讨如何使用Apache的 Digester 库来解析XML文档,这是一款强大的工具,能够将XML数据映射到Java对象,简化了处理XML的过程。 Digester 是Apache Commons项目的一部分,它提供了一种规则驱动的方法来处理...
### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 ...通过本篇示例的学习,读者可以了解到Digester的基本使用方法及其在实际开发中的应用,从而更好地利用这一工具解决XML解析问题。
- **XML解析**:Digester使用JAXP (Java API for XML Processing) 来解析XML文档,提取出元素和属性信息。 - **规则设定**:开发者可以通过`addRule`方法设置规则,例如当遇到特定的XML元素时,执行相应的Java方法...
本文将深入探讨如何使用Digester解析XML文件,以及在实际项目中如何应用。 首先,让我们了解什么是Apache Commons Digester。这是一个Java库,它的主要功能是读取XML文件,并基于一系列预先定义的规则(Rule),...
《digester解析XML详解》 ...总之,Digester为XML解析提供了便利,通过定义规则,可以将复杂的XML文档转换为易于操作的Java对象。熟练掌握这一工具,能够提高我们的开发效率,使XML处理更加得心应手。
通过 Digester,开发者可以轻松地处理XML数据,而无需手动编写大量的XML解析代码。这种面向对象的解析方式使得XML数据的处理更加直观和高效,尤其适合处理复杂的配置文件和数据结构。在实际项目中,可以结合Spring...
通过灵活地定义和组合规则,我们可以构建出强大的XML解析逻辑。 总结来说,Apache Digester结合`rule.xml`配置文件提供了一种强大而灵活的方式来解析自定义XML文件,将XML数据自动映射到Java对象。这种方式减少了...
本篇文章将深入探讨如何使用Digester进行XML解析,并提供相关的学习资源。 【描述】:“Digester读取XML学习” Digester的使用基于一系列预定义或自定义的规则,这些规则决定了XML文档的元素与Java对象之间的映射...
3. 设置XML解析器属性:如果需要,可以配置XML解析器的行为,如命名空间处理等。 4. 加载XML:`digester.parse(new InputSource(xmlInputStream));` 5. 处理结果:解析完成后,可以通过根对象或者预定义的变量访问...
Digester与DOM、SAX、JAXB等其他XML解析库相比,更注重于将XML转换为Java对象,适合于需要频繁读写XML的场景。但在大型项目中,可能需要考虑其复杂性和维护性。 通过本教程,你应该对使用Apache Commons Digester...
// 在解析完成后,container将包含由XML解析出的MyObject实例 List<MyObject> objects = container.getElements(); ``` 在这个例子中,XML文档中的每个`<root><element>`标签都会创建一个新的`MyObject`实例,并将...