Jwebap项目(二)——Digester项目的介绍

Digester是Jakarta 子项目Commons下的一个模块,支持基于规则的对任意XML文档的处理。Jwebap中采用它进行XML的加载。

Digester项目提供了非常友好的XML操作API,当XML结构改变时,只需要改变映射的规则,就可以完成代码的修改。

Digester项目提供了一个简单的例子
假定有两个JavaBean如下,分别为Person和Address

package mypackage;
public class Person {
public void addAddress(Address address);
public Iterator getAddress();
public String getName();
public void setName(String name);
}
public mypackage;
public class Address {
public int getStreet();
public void setStreet(String street);
public String getCity();
public void setCity(String city);
}

  用下面的xml文件进行配置

<Person name="yu.lide">
<address>
<type>business</type>
<street>234 Maple Dr.</street>
<city>Los Angeles</city>
<state>CA</state>
<zip>98765</zip>
<country>USA</country>
</address>
<address>
<type>business</type>
<street>234 Maple Dr.</street>
<city>Los Angeles</city>
<state>CA</state>
<zip>98765</zip>
<country>USA</country>
</address>
</Person>

[code]Digester digester = new Digester();
digester.setValidating(false); //不进行XML与相应的DTD的合法性验证
//当遇到<Person>时创建一个mypackage.Person对象,并将其放在栈顶
digester.addObjectCreate("Person", "mypackage.Person");
//根据<Person>元素的属性(attribute),对刚创建的Person对象的属性(property)进行设置
digester.addSetProperties("Person");
//当遇到<Person>的子元素<address>时创建一个mypackage.Address对象,并将其放在栈顶。
digester.addObjectCreate("Person/Address", "mypackage.Address");
//根据<Address>元素的属性(attribute),对刚创建的Address对象的属性(property)进行设置
digester.addSetProperties("Person/Address");
//对<Address>元素的子标签包含的内容当成属性进行设置
digester.addSetNestProperties("Person/Address");
//当再次遇到<Person>的子元素<Address>时创建一个mypackage.Address对象,并将其放在栈顶,同时调用第二栈顶元素(Person对象)的addAddress方法。
digester.addSetNext("Person/Address", "addAddress", "mypackage.Address");
Person person = (Person) digester.parse();
[/code]

当然,也可以通过配置rule.xml规则定义文件,来定义每个对象的映射规则,配置语法也很简单

[code]
<digester-rules>
<pattern value="address-book">
<pattern value="person">
<object-create-rule classname="Person"/>
<set-properties-rule/>
<set-next-rule methodname="addPerson"/>

<pattern value="name">
<call-method-rule methodname="setName" paramcount="0"/>
</pattern>

<pattern value="email">
<call-method-rule methodname="addEmail" paramcount="2"/>
<call-param-rule paramnumber='0' attrname='type'/>
<call-param-rule paramnumber='1'/>
</pattern>

<pattern value="address">
<object-create-rule classname="Address"/>
<set-nested-properties-rule/>
<set-next-rule methodname="addAddress"/>
</pattern>
</pattern>
</pattern>
</digester-rules>
[/code]

是不是很好用?多的不说,赶快去下载一下,试试吧,非常简单
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值