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方法。
分享到:
相关推荐
### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 Digester是Apache Jakarta项目下的一个工具类库,它简化了基于SAX(Simple API for XML)的XML解析过程。Digester能够根据定义好的规则自动将...
Digester使用堆栈来保存xml节点(stack.push()方法),当该xml节点中嵌套的所有子节点解析完毕,该节点将被弹出(stack.pup()方法)。Digester最大的优点就是使用模式匹配来表示xml文件中节点之间的父子关系 。
赠送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-...
赠送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-...
赠送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-...
赠送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是Apache软件基金会的Jakarta项目中的一个实用工具库,它主要用来解析XML文档,并根据预定义的规则自动创建和配置Java对象。这个工具在处理XML到Java对象映射时,极大地简化了代码,避免了手动解析XML的繁琐...
Digester是Apache软件基金会下的Jakarta项目中的一个Java库,主要用于简化XML到Java对象的映射过程。在处理XML文档时,它通过匹配XML元素结构到相应的Java对象的方法调用,实现了XML解析的自动化。这个工具对于那些...
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
- 创建XMLInputFactory实例,这是解析XML的起点。 - 使用XMLInputFactory创建XMLStreamReader,这是读取XML事件的对象。 - 通过XMLStreamReader逐个处理事件,如StartElement、EndElement、Characters等。 - 在...
除了DOM和SAX,还有一种推荐的XML解析方法是Apache Jakarta Commons Digester。Digester是基于SAX解析器构建的框架,它简化了处理XML文档的过程,通过规则匹配自动创建和填充Java对象,减少了开发者编写解析代码的...
java运行依赖jar包
4. **解析XML**:最后,使用`digester.parse()`方法解析XML文档,完成后,栈顶的对象通常是解析结果的根节点。 在提供的示例中,有两个JavaBean,Foo和Bar。Foo有一个名为addBar的方法,用于添加Bar对象,而Bar包含...
Jakarta Common Logging(JCL)是Java开发中的一个标准日志接口,由Apache软件基金会的Jakarta项目开发。它提供了一种统一的方式来管理和记录应用程序的日志信息,允许开发者选择自己喜欢的日志实现,如Log4j、Java ...
6. **XML文件读写**:在`XMLTest`类中,`readXMLFile`方法使用DOM解析器解析XML文件,将XML元素转换为`NodeList`,然后遍历节点,将数据填充到`StudentBean`对象中,再添加到`student_Vector`。`writeXMLFile`方法则...
除了上述组件外,Jakarta Commons 还包括 BeanUtils、Codec、 Digester 等,它们提供了诸如对象属性映射、编码解码、XML 解析等功能,大大简化了 Java 开发中的常见任务。 通过了解和使用 Jakarta Commons,开发者...
Servlet可以使用Java的DOM(文档对象模型)或SAX(简单API for XML)解析器来解析XML文件。DOM解析器会将整个XML文件加载到内存中,形成一个树形结构,方便操作;而SAX解析器则采用事件驱动的方式,逐行读取,适合...