`
Kenny.Lee
  • 浏览: 515078 次
  • 性别: 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
分享到:
评论

相关推荐

    使用Digester解析XML文档示例

    ### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 Digester是Apache Jakarta项目下的一个工具类库,它简化了基于SAX(Simple API for XML)的XML解析过程。Digester能够根据定义好的规则自动将...

    Jakarta-Common-Digester使用笔记

    Digester使用堆栈来保存xml节点(stack.push()方法),当该xml节点中嵌套的所有子节点解析完毕,该节点将被弹出(stack.pup()方法)。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.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-...

    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-...

    digester用法测试案例

    Digester是Apache软件基金会的Jakarta项目中的一个实用工具库,它主要用来解析XML文档,并根据预定义的规则自动创建和配置Java对象。这个工具在处理XML到Java对象映射时,极大地简化了代码,避免了手动解析XML的繁琐...

    Digester

    Digester是Apache软件基金会下的Jakarta项目中的一个Java库,主要用于简化XML到Java对象的映射过程。在处理XML文档时,它通过匹配XML元素结构到相应的Java对象的方法调用,实现了XML解析的自动化。这个工具对于那些...

    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

    stax+jaxb进行xml解析

    - 创建XMLInputFactory实例,这是解析XML的起点。 - 使用XMLInputFactory创建XMLStreamReader,这是读取XML事件的对象。 - 通过XMLStreamReader逐个处理事件,如StartElement、EndElement、Characters等。 - 在...

    关于XML文档的解析方法

    除了DOM和SAX,还有一种推荐的XML解析方法是Apache Jakarta Commons Digester。Digester是基于SAX解析器构建的框架,它简化了处理XML文档的过程,通过规则匹配自动创建和填充Java对象,减少了开发者编写解析代码的...

    jakarta.xml.bind-api-2.3.2.jar

    java运行依赖jar包

    digester学习笔记

    4. **解析XML**:最后,使用`digester.parse()`方法解析XML文档,完成后,栈顶的对象通常是解析结果的根节点。 在提供的示例中,有两个JavaBean,Foo和Bar。Foo有一个名为addBar的方法,用于添加Bar对象,而Bar包含...

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

    Jakarta Common Logging(JCL)是Java开发中的一个标准日志接口,由Apache软件基金会的Jakarta项目开发。它提供了一种统一的方式来管理和记录应用程序的日志信息,允许开发者选择自己喜欢的日志实现,如Log4j、Java ...

    Java操作XML编程实例解析[借鉴].pdf

    6. **XML文件读写**:在`XMLTest`类中,`readXMLFile`方法使用DOM解析器解析XML文件,将XML元素转换为`NodeList`,然后遍历节点,将数据填充到`StudentBean`对象中,再添加到`student_Vector`。`writeXMLFile`方法则...

    Jakarta Commons使用

    除了上述组件外,Jakarta Commons 还包括 BeanUtils、Codec、 Digester 等,它们提供了诸如对象属性映射、编码解码、XML 解析等功能,大大简化了 Java 开发中的常见任务。 通过了解和使用 Jakarta Commons,开发者...

    Servlet读取XML文件实现JSP分页(新上传的含有源代码)

    Servlet可以使用Java的DOM(文档对象模型)或SAX(简单API for XML)解析器来解析XML文件。DOM解析器会将整个XML文件加载到内存中,形成一个树形结构,方便操作;而SAX解析器则采用事件驱动的方式,逐行读取,适合...

Global site tag (gtag.js) - Google Analytics