我正在尝试创建一个可以轻松使用 dom 节点的 DSL。使用 DOMCategory 很好,但会增加“use(DOMCategory)”的噪音。有办法避免这种情况吗?
我尝试将脚本调用包装在对“use”的调用中,但这似乎在闭包中不起作用。
最佳答案
您可以使用groovy的运行时mixin
功能来永久混合在类别中。 Class.mixin 将类别中适用的方法添加到类的元类中。将其应用于作为每个类别方法的第一个参数出现的类和接口(interface),并且类别将可用,而无需将代码包含在 use(DOMCategory)
block 中。
示例:
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
关于dom - 比 DOMCategory 更好的处理 dom 的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937611/