今天我介绍一下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();
}
}
}
到这里我们的介绍就结束了,如果有什么问题请给我留言。。。