XML的解析digester应用

今天我介绍一下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();
		}
	}
}

 

到这里我们的介绍就结束了,如果有什么问题请给我留言。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值