先说大致的原理:
Digester解析XML会按照预先定义的xml规则解释。
这个规则中几个重要的节点如下:
<object-create-rule>这个标签是创建一个java实列
<set-properties-rule/>会根据解析文件的
属性调用生成类的setXXX方法,列如要解析的XML中有name,id,nextid,那么生成的类里如果有这些属性将会被调用他们的set方法。
<bean-property-setter-rule pattern="name" />会根据pattern来获取xml中标签名字,取的值,然后调用相应的bean的set方法。
<set-next-rule methodname="addStudent" />栈顶元素的下面一个元素(对象)的方法。
digester解析XML和他们大部分解析技术都一样,都用堆栈。当digester遇到一个<他会把这个元素压入堆栈,遇到/>就会把元素弹出堆栈。
1. 首先定义好对象,下面定义的对象只是测试用,无任何意义。
public class Student {
String sex;
String name;
String age;
Parent parent;
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
}
public class Parent {
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
import java.util.ArrayList;
import java.util.List;
public class Students {
List<Student> students;
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
public void addStudent(Student student) {
students.add(student);
}
public Students() {
super();
students = new ArrayList<Student>();
}
public void sayHello() {
for (Student st : students) {
System.out.println("hello !~ " + st.getName() + " sex: " + st.getSex());
System.out.println("hello !~ parent" + st.getParent().getName());
}
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.xml.sax.SAXException;
public class Parser {
public static void main(String[] args) throws FileNotFoundException, IOException, SAXException, URISyntaxException {
URL resource = Parser.class.getResource("studentRule.xml");
URL xmlFile = Parser.class.getResource("students.xml");
Digester digester = DigesterLoader.createDigester(resource);
Students students = null;
File file = new File(xmlFile.toURI().getPath());
students = (Students) digester.parse(new FileInputStream(file));
students.sayHello();
}
}
2. 然后定义xml解析规则
<?xml version="1.0" encoding="UTF-8"?>
<digester-rules>
<pattern value="students">
<object-create-rule classname="digester.Students" />
<pattern value="student">
<!-- 创建对象 -->
<object-create-rule classname="digester.Student" />
<!-- 自动设置属性 -->
<set-properties-rule />
<!-- bean对象调用set方法的规则s -->
<bean-property-setter-rule pattern="sex" />
<bean-property-setter-rule pattern="age" />
<bean-property-setter-rule pattern="name" />
<!-- 调用 digester.Students.addStudent -->
<set-next-rule methodname="addStudent" />
<pattern value="parent">
<object-create-rule classname="digester.Parent" />
<set-properties-rule />
<bean-property-setter-rule pattern="age" />
<bean-property-setter-rule pattern="name" />
<set-next-rule methodname="setParent" />
</pattern>
</pattern>
</pattern>
</digester-rules>
3. xml文件
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student sex="F">
<name>
test1name
</name>
<age>
test1age
</age>
<parent>
<name>
test1pname
</name>
<age>
test1page
</age>
</parent>
</student>
<student sex="M">
<name>
test2name
</name>
<age>
test2age
</age>
<parent>
<name>
test2pname
</name>
<age>
test2page
</age>
</parent>
</student>
<student sex="M">
<name>
test3name
</name>
<age>
test3age
</age>
<parent>
<name>
test3pname
</name>
<age>
test3page
</age>
</parent>
</student>
</students>
参考:http://blog.csdn.net/maomao1221/archive/2006/09/04/1174903.aspx
分享到:
相关推荐
### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 Digester是Apache Jakarta项目下的一个工具类库,它简化了基于SAX(Simple API for XML)的XML解析过程。Digester能够根据定义好的规则自动将...
在使用 Digester处理XML时,通常需要以下步骤: 1. 创建 Digester实例:`Digester digester = new Digester();` 2. 设置验证:`digester.setValidating(false);` 通常会关闭验证,除非需要严格的XML文档校验。 3. ...
1. XML解析:Android提供了两种主要的XML解析方式——DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析会一次性加载整个XML文件,适合小型文件;SAX则是事件驱动的解析器,适用于处理大型XML文档...
在IT行业中,XML(eXtensible Markup Language)和MD5(Message-Digest Algorithm 5)都是非常关键的技术。XML是一种用于标记数据的语言,而MD5则是一种广泛使用的哈希函数,用于验证数据的完整性和一致性。 XML是...
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,产生一个128位(16字节)的散列值。在Java中,可以使用`java.security.MessageDigest`类来计算MD5哈希。虽然MD5不适用于安全加密,但在某些场景下,如...
这些参数可以在Web应用内部被访问和使用。具体配置格式如下: - `<param-name>`:指定参数的名称。 - `<param-value>`:指定参数的值。 4. ****:用于定义一个过滤器。过滤器可以拦截用户请求,并进行预处理或后...
3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...
为了处理XML,开发者通常会使用DOM(Document Object Model)、SAX(Simple API for XML)或者XPath(XML Path Language)等解析库。DOM将整个XML文件加载到内存中形成一棵树形结构,便于遍历和操作;SAX是事件驱动...
服务器返回401响应时,通常会包含一个WWW-Authenticate头,指示客户端应该使用哪种类型的认证机制,如Basic、Digest等。 Digest认证是一种比Basic认证更安全的认证方式,因为它不直接发送明文密码。它基于哈希函数...
3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...
1. **SAX 解析**:Digester 内部使用 SAX 来解析 XML 文件。在解析过程中,需要对 Digester 进行适当的配置,以便正确识别 XML 标签和内容。 2. **Stack**:Digester 使用 Stack(栈)数据结构来保存和检索解析...
MD5(Message-Digest Algorithm 5)是一种常用的哈希函数,用于生成数据的固定长度摘要。在信息安全领域,MD5常用于数据校验、密码存储等方面。虽然MD5的安全性已不再满足现代加密需求,但在一些老系统或兼容性场景...
本教程将深入探讨如何进行ONVIF编译与开发,包括使用gSOAP工具处理SOAP消息,以及实现WSSE(Web Services Security Extensions,Web服务安全扩展)和DIGEST鉴权机制。 首先,让我们了解gSOAP。gSOAP是一个开源C和...
3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...
3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...
验证阶段,当接收到XML文件时,我们先使用相同的哈希函数计算接收到文件的摘要,然后与之前存储的摘要进行比较。如果两者匹配,说明文件在传输过程中未被篡改;若不匹配,则表明文件可能已被修改,存在安全隐患。 ...
这个路径被称为规则,可以使用`addRule`方法添加到Digester实例中。例如,如果XML中有`<server><database>`这样的结构,我们可以设置规则,让Digester在遇到`<database>`元素时创建一个新的数据库对象,并将其添加到...
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,由计算机科学家Ronald Rivest在1991年设计。它能够将任意长度的数据转化为一个固定长度的摘要值,通常是一个128位的二进制数,通常用32个十六进制数字...
虽然与Digest库的核心散列功能没有直接关系,但它们都是Apache Commons项目的一部分,通常一起使用,以在解析XML时实现更复杂的逻辑和数据验证。 四、应用实例 1. 文件完整性检查:在下载大文件后,通过计算本地...
在网络安全认证领域,digest用户认证是一种使用摘要算法对用户凭证进行加密验证的技术,它允许在不安全的网络通道中安全地进行身份验证。digest认证机制通常用于基于HTTP和SIP(Session Initiation Protocol)协议的...