`
Kenny.Lee
  • 浏览: 511180 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Jakarta Common Digester解析XML的简单例子

    博客分类:
  • J2EE
阅读更多
Jakarta Commons Digester官方网址
http://commons.apache.org/digester/
其中注意依赖包
BeanUtils和Logging


使用Digester可以帮我们迅速的解析XML并且封装成BEAN对象。

Example xml
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE digester-rules PUBLIC "-//Jakarta Apache //DTD digester-rules XML V1.0//EN"
   "digester-rules.dtd">
<menu>
	<root title="网址">
		<node title="QQ" url="http://www.qq.com" ></node>
		<node title="163" url="http://www.163.com" ></node>
	</root>
</menu>


Beans
import java.util.Vector;

/**
 * @author Kenny
 * 
 */
public class Menu {

	private Vector<Root> roots;

	public Menu() {
		roots = new Vector<Root>();
	}
	
	public void addRoot(Root root){
		roots.addElement(root);
	}

	public Vector<Root> getRoots() {
		return roots;
	}

	@Override
	public String toString() {
		return "Menu [roots=" + roots + "]";
	}

}


import java.util.Vector;

/**
 * @author Kenny
 * 
 */
public class Root {

	private String title;
	private Vector<Node> nodes;
	
	public Root() {
		nodes = new Vector<Node>(10);
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public Vector<Node> getNode() {
		return nodes;
	}

	public void addNode(Node node) {
		nodes.addElement(node);
	}

	@Override
	public String toString() {
		return "Root [nodes=" + nodes + ", title=" + title + "]";
	}

}


/**
 * @author Kenny
 * 
 */
public class Node {

	private String title;
	private String url;

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	@Override
	public String toString() {
		return "Node [title=" + title + ", url=" + url + "]";
	}

}


Test Unit
import java.io.IOException;
import java.net.URL;

import org.apache.commons.digester.Digester;
import org.junit.Assert;
import org.junit.Test;
import org.xml.sax.SAXException;

/**
 * @author Kenny
 * 
 */
public class TestDigest {

	@Test
	public void testParse() {
		URL xmlURL = this.getClass().getClassLoader().getResource("menu.xml");
		Digester digester = new Digester();
		digester.setValidating(false);
		digester.addObjectCreate("menu", Menu.class);
		digester.addObjectCreate("menu/root", Root.class);
		digester.addSetProperties("menu/root", "title","title");
		digester.addSetNext("menu/root", "addRoot");

		digester.addObjectCreate("menu/root/node", Node.class);
		digester.addSetProperties("menu/root/node", "title","title");
		digester.addSetProperties("menu/root/node", "url","url");
		digester.addSetNext("menu/root/node", "addNode");

		Menu menu = null;
		
		try {
			System.out.println(xmlURL.getPath());
			menu = (Menu) digester.parse(xmlURL);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}
		
		Assert.assertNotNull(menu);
		System.out.println(menu);
	}

}


其中 digester.addSetProperties 用来获取节点中的属性值。即<root title="网址">。

若是<root><title>网址</title></root>的形式,可以用digester.addBeanPropertySetter方法。
2
6
分享到:
评论

相关推荐

    Jakarta-Common-Digester使用笔记

    Digester使用堆栈来保存xml节点(stack.push()方法),当该xml节点中嵌套的所有子节点解析完毕,该节点将被弹出(stack.pup()方法)。Digester最大的优点就是使用模式匹配来表示xml文件中节点之间的父子关系 。

    jakarta.xml.bind-api-2.3.3-API文档-中英对照版.zip

    赠送jar包:jakarta.xml.bind-api-2.3.3.jar; 赠送原API文档:jakarta.xml.bind-api-2.3.3-javadoc.jar; 赠送源代码:jakarta.xml.bind-api-2.3.3-sources.jar; 赠送Maven依赖信息文件:jakarta.xml.bind-api-...

    jakarta.xml.bind-api-2.3.3-API文档-中文版.zip

    赠送jar包:jakarta.xml.bind-api-2.3.3.jar; 赠送原API文档:jakarta.xml.bind-api-2.3.3-javadoc.jar; 赠送源代码:jakarta.xml.bind-api-2.3.3-sources.jar; 赠送Maven依赖信息文件:jakarta.xml.bind-api-...

    Digester 实例

    首先Digester是什么,它是用来解析xml文件的的工具,是jakarta开源项目下commons的一个子项目,它能让程序员更方便的解析xml文件,而不需要了解底层的工作细节。 Digester 解析xml文件 实例。

    jakarta.xml.bind-api-2.3.2-API文档-中英对照版.zip

    赠送jar包:jakarta.xml.bind-api-2.3.2.jar; 赠送原API文档:jakarta.xml.bind-api-2.3.2-javadoc.jar; 赠送源代码:jakarta.xml.bind-api-2.3.2-sources.jar; 赠送Maven依赖信息文件:jakarta.xml.bind-api-...

    jakarta.xml.bind-api-2.3.2-API文档-中文版.zip

    赠送jar包:jakarta.xml.bind-api-2.3.2.jar; 赠送原API文档:jakarta.xml.bind-api-2.3.2-javadoc.jar; 赠送源代码:jakarta.xml.bind-api-2.3.2-sources.jar; 赠送Maven依赖信息文件:jakarta.xml.bind-api-...

    jakarta.xml.soap-api-1.4.2.zip

    jakarta.xml.soap-api-1.4.2.jar jakarta.xml.soap-api-1.4.2-javadoc.jar jakarta.xml.soap-api-1.4.2-sources.jar

    jakarta.xml.ws-api-2.3.3

    jakarta.xml.ws-api-2.3.3

    Digester笔记

    首先Digester是什么,它是用来解析xml文件的的工具,是jakarta开源项目下commons的一个...如果要使用Digester作为xml文件的解析,请到jakarta项目下 http://jakarta.apache.org/commons/digester,下载Digester的类库。

    jakarta.xml.bind-api-2.3.2.jar

    java运行依赖jar包

    Jakarta common logging 简介 以及和其它日志系统结合使用

    NULL 博文链接:https://zhoujian1982318.iteye.com/blog/1703893

    jakarta.annotation-api-1.3.5-API文档-中英对照版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    Jakarta commons docs API CHM 格式

    commons-digester XML 文件到 Java 对象的映射机制 commons-discovery 提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。 commons-el 提供在JSP2.0规范中定义的EL表达式的解释器. ...

    jakarta.annotation-api-1.3.5-API文档-中文版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    jakarta.websocket-api-1.1.2-API文档-中文版.zip

    赠送jar包:jakarta.websocket-api-1.1.2.jar; 赠送原API文档:jakarta.websocket-api-1.1.2-javadoc.jar; 赠送源代码:jakarta.websocket-api-1.1.2-sources.jar; 赠送Maven依赖信息文件:jakarta.websocket-api...

    jakarta commons-API

    jakarta commons的API

    Jakarta Commons使用

    Jakarta Commons使用,方便自己看看的东西。。

    jakarta.rar

    包含jakarta.activation-api-1.2.1-1.2.2、jakarta.annotation-api-1.3.5、jakarta.validation-api-2.0.1-2.0.2、jakarta.xml.bind-api-2.3.2-2.3.3,全量包

    jakarta.validation-api-2.0.1-API文档-中文版.zip

    赠送jar包:jakarta.validation-api-2.0.1.jar; 赠送原API文档:jakarta.validation-api-2.0.1-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-digester XML 文件到 Java 对象的映射机制 commons-discovery 提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。 commons-el 提供在JSP2.0规范中定义的EL表达式的解释器. ...

Global site tag (gtag.js) - Google Analytics