`

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();
		}
	}
}

 

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

1
1
分享到:
评论

相关推荐

    Java_XML解析之Digester的使用

    Java XML解析中的Digester是一个强大的工具,用于将XML文档转换为Java对象。它最初是为了处理Struts框架的配置文件而设计的,随着时间的发展,它成为一个轻量级且高效的框架,专注于单向转换,即从XML到Java对象。...

    xml解析commons-digester的demo

    本示例将详细介绍如何使用Apache Commons Digester进行XML解析。 Apache Commons Digester的核心概念是规则(Rule),这些规则定义了XML元素与Java对象之间的映射关系。通过一系列规则,Digester能够自动地读取XML...

    使用Apache的Digester来解析XML文档

    4. **配置Digester规则**:设置 Digester 规则以将XML解析为Java对象。这些规则通常在程序启动时初始化: ```java Digester digester = new Digester(); digester.setRulesValidation(true); // 启用规则验证 // ...

    Digester java解析xml

    总的来说,Digester 是一个功能强大的XML解析工具,能够简化Java应用中XML数据的处理。通过合理地利用其规则和特性,可以高效地将XML文档转化为易于操作的对象模型,极大地提高了开发效率。在实际项目中,了解并熟练...

    Digester解析XML

    ### Digester解析XML知识点详解 #### 一、Digester简介 **Digester** 是Apache Commons项目中的一个子项目,主要用于简化XML文档的解析工作。...对于需要频繁解析XML的应用场景来说,Digester是一个非常实用的选择。

    利用commons-digester解析xml

    在提供的博客链接中,作者可能详细讲解了如何使用 Digester 实现具体的XML解析案例,包括但不限于以下方面: - 如何配置 Digester 规则 - 如何处理嵌套元素和递归结构 - 如何处理命名空间(如果XML文档包含) - ...

    xml解析在java中的应用小程序

    本篇文章将深入探讨XML解析的原理以及在Java中的具体应用。 1. XML解析原理: XML解析主要分为两种方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器会将整个XML文档加载到内存中,形成一...

    digester解析xml必备包.rar

    2. **设置解析器**:将XML解析器(如SAXParser)与Digester关联,以便在解析XML时触发已设定的规则。 3. **解析XML**:使用`parse`方法,传入XML文件的输入流,开始解析过程。 4. **处理结果**:解析完成后,根...

    XML的解析之——使用Digester

    本文将深入探讨如何使用Apache的 Digester 库来解析XML文档,这是一款强大的工具,能够将XML数据映射到Java对象,简化了处理XML的过程。 Digester 是Apache Commons项目的一部分,它提供了一种规则驱动的方法来处理...

    使用Digester解析XML文档示例

    ### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 ...通过本篇示例的学习,读者可以了解到Digester的基本使用方法及其在实际开发中的应用,从而更好地利用这一工具解决XML解析问题。

    org.apache.commons.digester解析XML.rar

    - **XML解析**:Digester使用JAXP (Java API for XML Processing) 来解析XML文档,提取出元素和属性信息。 - **规则设定**:开发者可以通过`addRule`方法设置规则,例如当遇到特定的XML元素时,执行相应的Java方法...

    Digester解析XML文件

    本文将深入探讨如何使用Digester解析XML文件,以及在实际项目中如何应用。 首先,让我们了解什么是Apache Commons Digester。这是一个Java库,它的主要功能是读取XML文件,并基于一系列预先定义的规则(Rule),...

    digester解析xml

    《digester解析XML详解》 ...总之,Digester为XML解析提供了便利,通过定义规则,可以将复杂的XML文档转换为易于操作的Java对象。熟练掌握这一工具,能够提高我们的开发效率,使XML处理更加得心应手。

    Digester解析XML问题.pdf

    通过 Digester,开发者可以轻松地处理XML数据,而无需手动编写大量的XML解析代码。这种面向对象的解析方式使得XML数据的处理更加直观和高效,尤其适合处理复杂的配置文件和数据结构。在实际项目中,可以结合Spring...

    使用digester配置rule.xml规则来解析自定义的xml文件-代码

    通过灵活地定义和组合规则,我们可以构建出强大的XML解析逻辑。 总结来说,Apache Digester结合`rule.xml`配置文件提供了一种强大而灵活的方式来解析自定义XML文件,将XML数据自动映射到Java对象。这种方式减少了...

    Digester读取XML学习

    本篇文章将深入探讨如何使用Digester进行XML解析,并提供相关的学习资源。 【描述】:“Digester读取XML学习” Digester的使用基于一系列预定义或自定义的规则,这些规则决定了XML文档的元素与Java对象之间的映射...

    digester解析xml 所需jar包

    3. 设置XML解析器属性:如果需要,可以配置XML解析器的行为,如命名空间处理等。 4. 加载XML:`digester.parse(new InputSource(xmlInputStream));` 5. 处理结果:解析完成后,可以通过根对象或者预定义的变量访问...

    Digester读取xml教程.rar

    Digester与DOM、SAX、JAXB等其他XML解析库相比,更注重于将XML转换为Java对象,适合于需要频繁读写XML的场景。但在大型项目中,可能需要考虑其复杂性和维护性。 通过本教程,你应该对使用Apache Commons Digester...

    java反射,Digester解析xml文档

    // 在解析完成后,container将包含由XML解析出的MyObject实例 List&lt;MyObject&gt; objects = container.getElements(); ``` 在这个例子中,XML文档中的每个`&lt;root&gt;&lt;element&gt;`标签都会创建一个新的`MyObject`实例,并将...

Global site tag (gtag.js) - Google Analytics