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