我正在尝试创建一个可以轻松使用dom节点的DSL。使用DOMCategory很不错,但添加了'use(DOMCategory)'的噪音。有没有办法避免这种情况?
我尝试在调用'use'时包装脚本调用,但这似乎不适用于闭包。
答案 0 :(得分:4)
您可以使用groovy的运行时mixin
功能永久混合该类别。 Class.mixin将类中的适用方法添加到类的metaClass中。将它应用于作为每个类别方法的第一个参数显示的类和接口,该类别将在不将代码括在use(DOMCategory)
块中的情况下可用。
示例:
import org.w3c.dom.*
import groovy.xml.DOMBuilder
import groovy.xml.dom.DOMCategory
[Node, NodeList, NamedNodeMap, DOMCategory.NodesHolder]*.mixin DOMCategory
def sampleXml = '''
<sample>
<someNode anAttribute='foo'>bar</someNode>
</sample>
'''
def sample = DOMBuilder.parse(new StringReader(sampleXml)).documentElement
println sample.someNode*.tagName
println sample.someNode[0].'@anAttribute'
println sample.someNode[0].attributes['anAttribute']
给出:
[someNode]
foo
foo