浏览 3881 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-04
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> 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(); 当然,也可以通过配置rule.xml规则定义文件,来定义每个对象的映射规则,配置语法也很简单 <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> 是不是很好用?多的不说,赶快去下载一下,试试吧,非常简单 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-12-09
这东西是非常不错,非常的方便,顶一个
|
|
返回顶楼 | |
发表时间:2007-12-11
嗯,Digester本来是用于Struts配置解析的,大概比较好,就单独地把它给拿出来了吧。
|
|
返回顶楼 | |
发表时间:2007-12-17
基于规则的配置方案, 可以考虑作为组件的配置, 其实只要被配置的类符合JavaBean规范, 或者说IoC可注入性, 配置方案很容易更换的.
|
|
返回顶楼 | |