处理dom比DOMCategory更好的方式?

时间:2010-05-30 04:59:23

标签: dom groovy categories

我正在尝试创建一个可以轻松使用dom节点的DSL。使用DOMCategory很不错,但添加了'use(DOMCategory)'的噪音。有没有办法避免这种情况?

我尝试在调用'use'时包装脚本调用,但这似乎不适用于闭包。

1 个答案:

答案 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