上一篇文章中,体现了Groovy 对XML生成的灵活性,这种灵活性是怎么实现的呢,通过下面例子可以看出,实现方法很简单。
定义一个类:
class XmlBuilder {
def out
XmlBuilder(out) { this.out = out }
def invokeMethod(String name, args) {
out << "<$name>"
//如果参数是Closure,那么,进行本函数的递归调用
if(args[0] instanceof Closure) {
//这行语句很有意思
args[0].delegate = this
args[0].call()
}else {
out << args[0].toString()
}
out << "</$name>"
}
}
//使用已定义的类
def xml = new XmlBuilder(System.out)
xml.html {
head {
title "Hello World"
}
body {
p "Welcome!"
}
}
输出是一个xml字符串。