首页 安全基础 网络安全 安全协议 病毒分析 防火墙 OS安全 无线安全 Web安全 PKI与PMI 入侵检测 经典案例
安全审计 设备安全 安全管理 安全标准 法律法规 隔离网闸 DB安全 XML安全 开源项目 资源下载 安全论坛 备份恢复
 当前位置:首页>>xml安全>>xml基础>>正文
用digester简化xml文档处理 (1)
文章出处:www.ccidnet.com 作者:仙人掌工作室    发布时间:2004-12-28   点击:0
 

  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 + "' ";
}
}








作者:
[返回顶部↑]  [推荐好友] [查看评论]  
用户名: 新注册) 密码: 匿名评论 [查看评论]  发表评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 
↑文章搜索
  关键字:  
  范  围:  
  开始搜索  
※相关文章※
 

◎用dhtml来模拟实现下拉菜单
◎用digester简化xml配置文件
◎用c#与xml创建动态分层菜
◎用asp+xml打造留言本(4)
◎用asp、vb和xml建立互联网
◎用asp+xml打造留言本(3)
◎用asp、vb和xml建立互联网

 
※热点文章※
  ·[.net]:在managed c++中处
·[.net] 在传统com程序中使
·[.net] 在传统com程序中使
·thinking xml用musicbrain
·asp.net+xml开发网络硬盘(
·[.net]:在managed c++中处
·c#来创建和读取xml文档
 

关于我们 | 征搞启示 | 版权信息 | 联系我们 | 友情链接

版权所有:中国信息安全组织 © 2003-2005 Power by DedeCms