用Digester简化XML文档处理

原创 2006年06月12日 13:41:00
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"?>
<catalog library="somewhere">
  <book>
    <author>Author 1</author>
    <title>Title 1</title>
  </book>
  <book>
    <author>Author 2</author>
    <title>His One Book</title>
  </book>
  <magazine>
    <name>Mag Title 1</name>
    <article page="5">
      <headline>Some Headline</headline>
    </article>
    <article page="9">
      <headline>Another Headline</headline>
    </article>
  </magazine>
  <book>
    <author>Author 2</author>
    <title>His Other Book</title>
  </book>
  <magazine>
    <name>Mag Title 2</name>
    <article page="17">
      <headline>Second Headline</headline>
    </article>
  </magazine>
</catalog>

下面是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; i<books.size(); i++ ){
      buf.append( books.elementAt(i) ).append( newline );
    }
    buf.append( "--- Magazines ---" ).append( newline );
    for( int i=0; i<magazines.size(); i++ ){
      buf.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; i<articles.size(); i++ ){
      buf.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 + "' "
  }
}

用Digester简化XML文档处理

用Digester简化XML文档处理                           (转自:赛迪网,作者:仙人掌工作室)    Digester框架属于Jakarta Commons,它以规则和...
  • duanzongyuan
  • duanzongyuan
  • 2006年08月15日 19:38
  • 372

[转]用digester简化xml文档处理 (1)

digester框架属于jakarta commons,它以规则和模式为基础处理xml文档。与sax和dom之类的标准api相比,digester不涉及太多的细节问题,非常适合于对xml文档进行简单的...
  • lyk831216
  • lyk831216
  • 2007年08月15日 23:51
  • 395

用digester简化xml文档处理 (2)

指定模式和规则  import org.apache.commons.digester.*;import java.io.*;import java.ut...
  • lyk831216
  • lyk831216
  • 2007年08月16日 00:07
  • 578

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

Digester框架属于Jakarta Commons,它以规则和模式为基础处理XML文档。与SAX和DOM之类的标准API相比,Digester不涉及太多的细节问题,非常适合于对XML文档进行简单的...
  • roczxp
  • roczxp
  • 2005年05月30日 12:41
  • 637

理解Tomcat(一) 利用Digester解析xml文件

Tomcat与Digester的关系我们利用Tomcat做服务器开发Web应用时,总会有一个配置文件web.xml,进行一些对象的实例化或是Servlet的映射的配置,所以要想理解Tomcat的一些配...
  • qq_24451605
  • qq_24451605
  • 2016年05月01日 09:34
  • 4874

[Java学习]使用digester 解析xml配置文件

Java离不开xml配置文件,而Apache的Digester是解析xml的一个很好的工具。Digester的运行依赖下列包:一个遵循Jaxp(1.1版本及以后)的XML解析器Jakarta comm...
  • Gooing
  • Gooing
  • 2005年05月26日 14:22
  • 7653

Digester解析xml的几种情况

在工作中,调用第三方接口时,会解析不同的xml格式,解析xml的方式有很多,但是Digester比较简单,以下是我遇到的几种情况: 第一种情况:input= id="1" code="AH...
  • panhaixin1988
  • panhaixin1988
  • 2013年09月24日 10:20
  • 920

利用Digester实现xml和bean之间的转换(二)

Digester框架属于Jakarta Commons,它以规则和模式为基础处理XML文档。与SAX和DOM之类的标准API相比,Digester不涉及太多的细节问题,非常适合于对XML文档进行简单的...
  • LchinaM
  • LchinaM
  • 2016年07月04日 15:00
  • 1035

Java XML解析之Digester的使用

Java XML解析之Digester的使用   转自:http://mopishv0.blog.163.com/blog/static/5445593220102209508914/?sugg...
  • z69183787
  • z69183787
  • 2015年07月19日 12:44
  • 2197

Tomcat源码的catalina中利用Digester解析conf/server.xml

最近在学习Tomcat的源码,在catalina. createStartDigester方法中,Tomcat开发人员采用了Digester来读取conf/server.xml文件,以前读取xml文件...
  • wgw335363240
  • wgw335363240
  • 2010年09月07日 23:28
  • 4544
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Digester简化XML文档处理
举报原因:
原因补充:

(最多只允许输入30个字)