2010-05-30 2 views
2

Я пытаюсь создать DSL, который может легко использовать узел dom. Использование DOMCategory приятное, но добавляет шум «use (DOMCategory)». Есть ли способ избежать этого?лучший способ обработки дома, чем DOM-категория?

Я попытался обернуть вызов скрипта внутри вызова «использовать», но это не работает в закрытии.

+0

Вы можете поставить то, что вы пытались что unsatisfatory в этом вопросе? –

ответ

3

Вы можете использовать функцию groovy runtime mixin, чтобы постоянно смешивать в категории. Class.mixin добавляет применимые методы в категорию к метаклассу класса. Примените его к классам и интерфейсам, которые отображаются в качестве первого параметра для метода каждой категории, и категория будет доступна без включения кода в блок 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