技术开发 频道

使用Apache宝石Digester改善XML处理



四、调用任意的函数

    Digester的功能还不仅仅是设置bean的属性,它还可以调用在Digester栈中对象的任意方法。这个功能可以由CallMethod方法来完成。我们首先要为这个方法传入方法名,然后可以选择传入参数个数和参数类型。在Digester的说明文档中描述了CallParam方法定义的传入invoked函数的参数值。这个值可以使用当前XML结点的属性值,也可以使用当前结点包含的字符串。例如,在上面DigesterDriver的实现中使用BeanPropertySetter方法时,我们可以通过显式地调用setter属性,并将数据作为参数来达到同样的效果。修改后的实现代码如下:

   digester.addCallMethod( "catalog/book/author", "setAuthor", 1 );
   digester.addCallParam( "catalog/book/author", 0 );

   
在上面代码中,首先将方法名(setAuthor())作为addCallMethod方法的第二个参数传入。第三个参数是setAuthor方法的参数个数。第二行的代码的作用是将当前结点<author>包含的字符串值作为setAuthor方法的参数值,并将这个值作为参数数组的第1个值。我们还可以指定一个属性名来作为参数的值,代码如下:

    digester.addCallParam( "catalog/book/author", 0, "author" );

   
上面的代码将catalog/book/author结点中的author的值作为setAuthor的参数。

    上面的代码有一个地方容易犯错误,或是容易搞糊涂。digester.addCallMethod( "pattern", "methodName", 0 )并不是指定一个无参数方法的调用,而是指定有一个参数的方法。这个值就是当前XML元素的值。如果要想指定无参数的调用方法,可以使用如下的代码:

digester.addCallMethod( "pattern", "methodName" );.

0
相关文章