设为首页收藏本站language 语言切换
查看: 1325|回复: 0
收起左侧

用Digester简化XML文档处理

[复制链接]
发表于 2010-2-25 10:26:36 | 显示全部楼层 |阅读模式
<p >Digester框架属于Jakarta Commons,它以规则和模式为基础处理XML文档。与SAX和DOM之类的标准API相比,Digester不涉及太多的细节问题,非常适合于对XML文档进行简单的处理。 <p >在Java和XML开发中,一个常见的任务是把XML文档转换成对应的Java Bean对象的层次结构。人们经常用标准的SAX和DOM API来完成这个任务。虽然这两种API都很强大和灵活,但对于某些简单的任务来说,它们显得操作层次太低,也就是说,涉及了太多的细节问题。Jakarta Digester框架能够很好地满足这类场合的需要。 <p ><center><font color="#000099"><strong>Digester框架简介 </strong></font></center><p >Jakarta的Digester框架从Struts框架发展而来,原先被用来处理struts-config.xml配置文件,但很快人们认识到它有着更广泛的用途,把它转入了Jakarta Commons项目。Jakarta Commons的目标是提供一个“可重用Java组件的仓库”。Digester最新的版本是1.3,于2002年8月13日发布。 <p >Digester框架允许开发者指定一组动作,当解析器在XML文档中发现某些特定的简单模式时动作被执行。Digester框架带有10个预定义的规则(Rule),涵盖了unmarshalling XML(例如创建Bean或设置Bean属性)的大多数需求( marshalling的原意是指“配制整齐,编组列车”,marshalling是在内存中为Java对象生成XML描述文档的过程,而unmarshalling是指把XML形式的描述转换到可用Java代码操作的对象的过程,我们称之为“反配制”),但必要时用户可以定义和实现自己的规则。 <p >在本文的例子中,我们将反配制下面这个XML文档: <p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>&lt;?xml version=&quot;1.0&quot;?&gt;&lt;catalog library=&quot;somewhere&quot;&gt;   &lt;book&gt;      &lt;author&gt;Author 1&lt;/author&gt;      &lt;title&gt;Title 1&lt;/title&gt;   &lt;/book&gt;   &lt;book&gt;      &lt;author&gt;Author 2&lt;/author&gt;      &lt;title&gt;His One Book&lt;/title&gt;   &lt;/book&gt;   &lt;magazine&gt;      &lt;name&gt;Mag Title 1&lt;/name&gt;      &lt;article page=&quot;5&quot;&gt;         &lt;headline&gt;Some Headline&lt;/headline&gt;      &lt;/article&gt;      &lt;article page=&quot;9&quot;&gt;         &lt;headline&gt;Another Headline&lt;/headline&gt;      &lt;/article&gt;   &lt;/magazine&gt;   &lt;book&gt;      &lt;author&gt;Author 2&lt;/author&gt;      &lt;title&gt;His Other Book&lt;/title&gt;   &lt;/book&gt;   &lt;magazine&gt;      &lt;name&gt;Mag Title 2&lt;/name&gt;      &lt;article page=&quot;17&quot;&gt;         &lt;headline&gt;Second Headline&lt;/headline&gt;      &lt;/article&gt;   &lt;/magazine&gt;&lt;/catalog&gt;</ccid_code></pre></td></tr></table></ccid_nobr><p >下面是Bean的代码。注意使用Digester框架时,Bean类必须定义成public。 <p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>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( &quot;line.separator&quot; );      StringBuffer buf = new StringBuffer();      buf.append( &quot;--- Books ---&quot; ).append( newline );      for( int i=0; i&lt;books.size(); i++ ){         buf.append( books.elementAt(i) ).append( newline );      }      buf.append( &quot;--- Magazines ---&quot; ).append( newline );      for( int i=0; i&lt;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 &quot;Book: Author='&quot; + author + &quot;' Title='&quot; + title + &quot;'&quot;;   }}//===================================================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( &quot;Magazine: Name='&quot; + name + &quot;' &quot;);      for( int i=0; i&lt;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 &quot;Article: Headline='&quot; + headline + &quot;' on page='&quot; + page + &quot;' &quot;;   }}</ccid_code></pre></td></tr></table></ccid_nobr><p align="center"><font color="FF0000" >1</font>2<span class="content01">下一页&gt;&gt;</span></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-12 01:11 , Processed in 0.116267 second(s), 22 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表