2010-05-30 42 views
2

我正在嘗試創建一個可以輕鬆使用dom節點的DSL。使用DOMCategory很不錯,但增加了'use(DOMCategory)'的噪音。有沒有辦法避免這種情況?比DOMCategory更好的處理DOM的方法?

我試圖在'使用'的調用中包裝腳本調用,但是這似乎不適用於閉包。

+0

你能不能把你已經試過那是什麼的問題unsatisfatory? – 2010-05-30 09:35:46

回答

3

您可以使用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