2
我正在嘗試創建一個可以輕鬆使用dom節點的DSL。使用DOMCategory很不錯,但增加了'use(DOMCategory)'的噪音。有沒有辦法避免這種情況?比DOMCategory更好的處理DOM的方法?
我試圖在'使用'的調用中包裝腳本調用,但是這似乎不適用於閉包。
我正在嘗試創建一個可以輕鬆使用dom節點的DSL。使用DOMCategory很不錯,但增加了'use(DOMCategory)'的噪音。有沒有辦法避免這種情況?比DOMCategory更好的處理DOM的方法?
我試圖在'使用'的調用中包裝腳本調用,但是這似乎不適用於閉包。
您可以使用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
你能不能把你已經試過那是什麼的問題unsatisfatory? – 2010-05-30 09:35:46