站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题用Digester简化XML文档处理(一)

用Digester简化XML文档处理(一)

摘要: 用Digester简化XML文档处理(一)
内容: Digester 框架属于 Jakarta Commons,它以规则和模式为基础处理XML文档。与 SAX 和 DOM 之类的标准API相比,Digester 不涉及太多的细节问题,非常适合于对XML文档进行简单的处理。

  在Java和XML开发中,一个常见的任务是把XML文档转换成对应的Java Bean对象的层次结构。人们经常用标准的SAX和DOM API来完成这个任务。虽然这两种API都很强大和灵活,但对于某些简单的任务来说,它们显得操作层次太低,也就是说,涉及了太多的细节问题。Jakarta Digester框架能够很好地满足这类场合的需要。


  Digester框架简介

  Jakarta的Digester框架从Struts框架发展而来,原先被用来处理struts-config.xml配置文件,但很快人们认识到它有着更广泛的用途,把它转入了Jakarta Commons项目。Jakarta Commons的目标是提供一个“可重用Java组件的仓库”。Digester最新的版本是1.3,于2002年8月13日发布。

  Digester框架允许开发者指定一组动作,当解析器在XML文档中发现某些特定的简单模式时动作被执行。Digester框架带有10个预定义的规则(Rule),涵盖了unmarshalling XML(例如创建Bean或设置Bean属性)的大多数需求( marshalling的原意是指“配制整齐,编组列车”,marshalling是在内存中为Java对象生成XML描述文档的过程,而unmarshalling是指把XML形式的描述转换到可用Java代码操作的对象的过程,我们称之为“反配制”),但必要时用户可以定义和实现自己的规则。

  在本文的例子中,我们将反配制下面这个XML文档:

<?xml version="1.0"?>


Author 1
Title 1


Author 2
His One Book


Mag Title 1

<headline>Some Headline</headline>


<headline>Another Headline</headline>



Author 2
His Other Book


Mag Title 2

<headline>Second Headline</headline>




  下面是Bean的代码。注意使用Digester框架时,Bean类必须定义成public。

import java.util.Vector;
public class Catalog {
private Vector books;
private Vector magazines;
public Catalog() {
books = new Vector();
magazines = new Vector();
}
public void addBook( Book rhs ) {
books.addElement( rhs );
}
public void addMagazine( Magazine rhs ) {
magazines.addElement( rhs );
}
public String toString() {
String newline = System.getProperty( "line.separator" );
StringBuffer buf = new StringBuffer();
buf.append( "--- Books ---" ).append( newline );
for( int i=0; ibuf.append( books.elementAt(i) ).append( newline );
}
buf.append( "--- Magazines ---" ).append( newline );
for( int i=0; ibuf.append( magazines.elementAt(i) ).append( newline );
}
return buf.toString();
}
}
//===================================================
public class Book {
private String author;
private String title;
public Book() {}
public void setAuthor( String rhs ) { author = rhs; }
public void setTitle( String rhs ) { title = rhs; }
public String toString() {
return "Book: Author='" + author + "' Title='" + title + "'";
}
}
//===================================================
import java.util.Vector;
public class Magazine {
private String name;
private Vector articles;
public Magazine() {
articles = new Vector();
}
public void setName( String rhs ) { name = rhs; }
public void addArticle( Article a ) {
articles.addElement( a );
}
public String toString() {
StringBuffer buf = new StringBuffer( "Magazine: Name='" + name + "' ");
for( int i=0; ibuf.append( articles.elementAt(i).toString() );
}
return buf.toString();
}
}
//===================================================
public class Article {
private String headline;
private String page;
public Article() {}
public void setHeadline( String rhs ) { headline = rhs; }
public void setPage( String rhs ) { page = rhs; }
public String toString() {
return "Article: Headline='" + headline + "' on page='" + page + "' ";
}
}

Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd, scwcd Digeste
↑返回目录
前一篇: JavaBean-XML组件轻松实现JavaBeans到XML的相互转换
后一篇: Servlets 最佳实践(一)