先说大致的原理:
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解析XML问题.pdf
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 ...
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 ...
用户输入需要通过MD5 digest的内容,程序给出digest输出结果
“摘要”式认证( Digest authentication)是一个简单的认证机制,最初是为HTTP协议开发的,因而也常叫做HTTP摘要,在RFC2671中描述。其身份验证机制很简单,它采用杂凑式(hash)加密方法,以避免用明文传输用户的...
digest 用户认证 response生成算法.适用于大部分网络安全认证。
赠送jar包:t-digest-3.2.jar; 赠送原API文档:t-digest-3.2-javadoc.jar; 赠送源代码:t-digest-3.2-sources.jar; 赠送Maven依赖信息文件:t-digest-3.2.pom; 包含翻译后的API文档:t-digest-3.2-javadoc-API...
一个模拟http 401 Digest认证的登录海康NVR抓取摄像头列表的小demo
gsoap编译,onvif示例,包含发现设备,获取设备能力,ptz控制,wsse鉴权和digest鉴权。
t-digest 最新源码分享,t-digest 最新源码分享t-digest 最新源码分享t-digest 最新源码分享t-digest 最新源码分享t-digest 最新源码分享t-digest 最新源码分享t-digest 最新源码分享t-digest 最新源码分享t-digest ...
SM3国密算法第二部分,SM3DIGEST
MK-QUERY-DIGEST也是一个用Perl脚本写的转存储日志分析程序。和MYSQLDUMPSLOW一样,也可以...在使用MK-QUERY-DIGEST工具之前必须要确保已经开启了慢日志,如何开启慢日志请参考《MYSQL慢查询日志功能的开启方法.doc》。
ISSCC 2012 - Digest .pdf ISSCC 2012 - Digest .doc word较大,打开比较慢
Digest-Perl-MD5
RFC2617描述了HTTP Digest Authentication,这个是中文版,根据原英文版进行了校正,并重新排版。
ISSCC 2023 Digest
ISSCC2019 - Digest.docx ISSCC2019 - Digest.pdf 1 Plenary Session 2 Processors 3 Nyquist Rate ADCs 4 Power Amplifiers 5 Image Sensors 6 Ultra-High-Speed Wireline 7 Machine Learning ...