一.序
Digester是apache的一个组件 apache commons-digester.jar,通过它可以很方便的从xml文件生成java对象.你不用再象以前通过jdom或者Xerces去读取一个document对象.(jdom和Xerces仍然有它们的用武之地及强大之处,在其它应用里你也少不了它们)
我只是用一个例子展示一下如何把xml文件生成一个java object.
首先你必须把jar加入到你的项目classpath.
(一)准备:
1.环境: Eclipse, jdk1.4+
2.需求说明:学院包含学生和老师,学生可以选修课程,老师有不同的资格认证。
3.Java Class的定义,简洁起见,略去import内容。
4.使用Digester生成java对象 必须要定义一个xml文件,此xml文件必须符合digester-rules.dtd的规则。
5.所有的xml文件必须在classpath路径中,这样可以通过Class.getClassLoader().getInputStream()读取xml文件。
(二)提要:
本示例所需的java class 和 xml文件分成四类:
1.基础xml文件: [academy.xml]: 你将要解析的xml文件.
2.基础java class: [Academy.java, Teacher.java, Student.java, Cousre.java]: 生成的对象的类定义
3.digesterRules.xml: [academyRules.xml]: 定义了基础xml文件到基础java class的匹配(映射)关系
4.Digester class: [DigestXMLJavaAcademy.java]: 根据digesterRules.xml去解析基础xml文件,并生成java 对象
(三)参考资料
1.English ebook: Pro Jakarta Commons by Harshad Oak Apress 2004
二.基础Java Class
1.学院 class Academy.java
2.学生 Student.java
3.老师 Teacher.java
4.课程 Course.java
三.基础XML文件
============================================================
学院 academy.xml,包含了学生(包含了课程),老师
四.Digester Class
DigestXMLJavaAcademy.java 和academyRules.xml
其中academyRules.xml用来定义xml文件和java对象的匹配(映射)关系,格式要符合digester-rules.dtd格式约束
DigestXMLJavaAcademy.java 根据academyRules.xml解析academy.xml文件并生成 Academy对象.
2. DigestXMLJavaAcademy.java
我自己运行没成功,呵呵,继续努力吧,互勉。
Digester是apache的一个组件 apache commons-digester.jar,通过它可以很方便的从xml文件生成java对象.你不用再象以前通过jdom或者Xerces去读取一个document对象.(jdom和Xerces仍然有它们的用武之地及强大之处,在其它应用里你也少不了它们)
我只是用一个例子展示一下如何把xml文件生成一个java object.
首先你必须把jar加入到你的项目classpath.
(一)准备:
1.环境: Eclipse, jdk1.4+
2.需求说明:学院包含学生和老师,学生可以选修课程,老师有不同的资格认证。
3.Java Class的定义,简洁起见,略去import内容。
4.使用Digester生成java对象 必须要定义一个xml文件,此xml文件必须符合digester-rules.dtd的规则。
5.所有的xml文件必须在classpath路径中,这样可以通过Class.getClassLoader().getInputStream()读取xml文件。
(二)提要:
本示例所需的java class 和 xml文件分成四类:
1.基础xml文件: [academy.xml]: 你将要解析的xml文件.
2.基础java class: [Academy.java, Teacher.java, Student.java, Cousre.java]: 生成的对象的类定义
3.digesterRules.xml: [academyRules.xml]: 定义了基础xml文件到基础java class的匹配(映射)关系
4.Digester class: [DigestXMLJavaAcademy.java]: 根据digesterRules.xml去解析基础xml文件,并生成java 对象
(三)参考资料
1.English ebook: Pro Jakarta Commons by Harshad Oak Apress 2004
二.基础Java Class
1.学院 class Academy.java
public class Academy { private Vector students; private Vector teachers; private String name; public Academy() { students = new Vector(); teachers = new Vector(); } public void addStudent(Student student) { students.addElement(student); } public void addTeacher(Teacher teacher) { teachers.addElement(teacher); } public Vector getStudents() { return students; } public void setStudents(Vector newStudents) { students = newStudents; } public Vector getTeachers() { return teachers; } public void setTeachers(Vector newTeachers) { teachers = newTeachers; } public String getName() { return name; } public void setName(String newName) { name = newName; } }
2.学生 Student.java
public class Student { private Vector courses; private String name; private String division; public Student() { courses = new Vector(); } public void addCourse(Course course) { courses.addElement(course); } public String getName() { return name; } public void setName(String newName) { name = newName; } public String getDivision() { return division; } public void setDivision(String newDivision) { division = newDivision; } public void setCourses(Vector courses) { this.courses = courses; } public Vector getCourses() { return courses; } }
3.老师 Teacher.java
public class Teacher { private String name; private Vector certifications; public Teacher() { certifications = new Vector(); } public void addCertification(String certification) { certifications.addElement(certification); } public String getName() { return name; } public void setName(String newName) { name = newName; } public void setCertifications(Vector certifications) { this.certifications = certifications; } public Vector getCertifications() { return certifications; } }
4.课程 Course.java
public class Course { private String id; private String name; public Course() { } public String getId() { return id; } public void setId(String newId) { id = newId; } public String getName() { return name; } public void setName(String newName) { name = newName; } }
三.基础XML文件
============================================================
学院 academy.xml,包含了学生(包含了课程),老师
<?xml version="1.0"?> <academy name="JAcademy" > <student name="JavaBoy" division="A"> <course> <id>C1</id> <name>JSP</name> </course> <course> <id>C2</id> <name>Servlets</name> </course> </student> <student name="JavaGirl" division="B"> <course> <id>C3</id> <name>EJB</name> </course> </student> <teacher name="JavaGuru"> <certification>SCJP</certification> <certification>SCWCD</certification> </teacher> <teacher name="JavaMaster"> <certification>OCP</certification> <certification>SCJP</certification> <certification>SCEA</certification> </teacher> </academy>
四.Digester Class
DigestXMLJavaAcademy.java 和academyRules.xml
其中academyRules.xml用来定义xml文件和java对象的匹配(映射)关系,格式要符合digester-rules.dtd格式约束
DigestXMLJavaAcademy.java 根据academyRules.xml解析academy.xml文件并生成 Academy对象.
1. academyRules.xml <?xml version="1.0"?> <digester-rules> <pattern value="academy"> <object-create-rule classname="com.commonsbook.chap7.academy.Academy" /> <set-properties-rule /> <pattern value="student"> <object-create-rule classname="com.commonsbook.chap7.academy.Student" /> <set-properties-rule /> <pattern value="course"> <object-create-rule classname="com.commonsbook.chap7.academy.Course" /> <bean-property-setter-rule pattern="id"/> <bean-property-setter-rule pattern="name"/> <set-next-rule methodname="addCourse" /> </pattern> <set-next-rule methodname="addStudent" /> </pattern> <pattern value="teacher"> <object-create-rule classname="com.commonsbook.chap7.academy.Teacher" /> <set-properties-rule /> <call-method-rule pattern="certification" methodname="addCertification" paramcount="1" /> <call-param-rule pattern="certification" paramnumber="0"/> <set-next-rule methodname="addTeacher" /> </pattern> </pattern> </digester-rules>
2. DigestXMLJavaAcademy.java
public class DigestXMLJavaAcademy { public void digest(){ try { //Create Digester using rules defined in academyRules.xml Digester digester = DigesterLoader.createDigester( this.getClass().getClassLoader().getResource("academyRules.xml")); //Parse academy.xml using the Digester to get an instance of Academy Academy a = (Academy)digester.parse( this.getClass().getClassLoader().getResourceAsStream("academy.xml")); Vector vStud=a.getStudents(); Vector vTeach=a.getTeachers(); for (int i = 0; i < vStud.size(); i++) { System.out.println("Student>> "+PropertyUtils.describe(vStud.get(i))); } for (int i = 0; i < vTeach.size(); i++) { System.out.println("Teacher>> "+ PropertyUtils.describe(vTeach.get(i))); } } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { DigestXMLJavaAcademy xmlDigest= new DigestXMLJavaAcademy(); xmlDigest.digest(); } }
我自己运行没成功,呵呵,继续努力吧,互勉。
相关推荐
Digester使用堆栈来保存xml节点(stack.push()方法),当该xml节点中嵌套的所有子节点解析完毕,该节点将被弹出(stack.pup()方法)。Digester最大的优点就是使用模式匹配来表示xml文件中节点之间的父子关系 。
### 使用Apache Commons Digester开发指南 #### 概述 Apache Commons Digester 是一款基于 Java 的开源库,专门用于简化 XML 文件解析的过程。它利用 SAX(Simple API for XML)解析器来解析 XML 数据,并通过一...
7. **XML解析与事件驱动**: Digester使用DOM(Document Object Model)解析XML文档,但它的核心是事件驱动的,即每当遇到匹配的XML元素时,它会触发相应的Rule。 8. **使用示例**: 在实际应用中,首先你需要创建一...
1. **XML解析**:Digester使用SAX解析器处理XML文档,而不是DOM解析器,这意味着它在处理大型XML文件时内存效率更高。SAX解析器逐行读取XML,当遇到特定的元素时触发回调方法。 2. **规则匹配**:通过`addRule()`...
- **栈数据结构**: 在解析过程中,Digester使用栈来保存和检索生成的Java对象。这种方式有利于处理嵌套层次较深的XML元素。 ##### 2. 模式匹配 - Digester通过匹配模式来定位XML文件中的元素。模式匹配是一种灵活的...
### Digester 实例详解 #### 一、Digester 概述 Digester 是一个非常实用且功能强大的 XML 解析工具,它属于 ...对于需要频繁处理 XML 数据的应用来说,使用 Digester 可以显著提高开发效率,减少出错的可能性。
4. **事件驱动**:Digester使用事件驱动模型,当匹配到XML元素时,触发相应的事件处理器(Rule)。 **三、使用Digester的基本步骤** 1. **引入依赖**:在项目中添加Apache Commons Digester的库依赖。 2. **创建...
- **XML解析**:Digester使用JAXP (Java API for XML Processing) 来解析XML文档,提取出元素和属性信息。 - **规则设定**:开发者可以通过`addRule`方法设置规则,例如当遇到特定的XML元素时,执行相应的Java方法...
2. **Rule集合**:Digester使用`Rule`对象来定义解析规则。每个`Rule`对应XML文档中的一个元素,当解析到该元素时,`Rule`就会执行相应的操作,如创建对象、设置属性或者调用方法。 3. **命名空间支持**:除了基本...
由于无法直接访问该链接,我会基于一般的Apache Commons Digester使用场景和功能进行讲解。 Apache Commons Digester是一个强大的工具,主要用途是读取XML文档,并根据预定义的一系列规则触发对Java对象的操作。...
4. **事件驱动模型**:Digester使用事件驱动的编程模型,当解析到特定的XML元素时,会触发预定义的事件处理器。 5. **集成其他Apache Commons组件**:由于是Apache Commons的一部分,Digester可以无缝集成其他...
1. "Digester笔记2.doc":可能包含了更深入的Digester使用技巧和案例,包括自定义规则和处理复杂XML结构的方法。 2. "Digester笔记.doc":基础的Digester教程,覆盖了基本的XML解析和对象绑定操作。 3. "文件合并...
下面我们将深入探讨 Digester 的核心概念、使用方法以及其在实际项目中的应用。 一、 Digester 概述 1.1 定义与功能 Digester 是 Apache Commons 中的一个模块,它的主要作用是读取XML文档,并根据预先设定的规则...
3. **解析XML**:使用 Digester 的 `parse()` 方法读取XML文件,根据预先定义的规则进行处理。 4. **结果处理**:最后,Digester会生成一个对象模型,代表了XML文档的内容。 以下是一个简单的 Digester 使用示例: ...
2. 对象堆栈(Object Stack): Digester 使用对象堆栈来保持当前处理的对象。每当遇到一个新的XML元素时, Digester 就会在堆栈顶创建一个新的对象,并将其压入堆栈。通过这种方式,可以实现父子关系的构建。 3. ...
2. **XML解析**:Digester使用了SAX(Simple API for XML)解析器,这是一种事件驱动的解析模型,它只遍历XML文档一次,对每个元素和属性触发相应的事件,而不是像DOM解析器那样将整个文档加载到内存中。这使得SAX...
使用Digester的基本步骤如下: 1. 创建一个`Digester`实例。实例化后,它可以安全地重复使用,但需要注意的是,它是非线程安全的。 2. 配置`Digester`属性,例如设置是否验证XML文档。 3. 添加处理规则,这些规则...
不错的解析XML的类,主要利用org.apache.commons.digester.Digester;
赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...