2010-05-30 10 views
2

J'essaie de créer un DSL qui peut facilement utiliser un nœud dom. Utiliser DOMCategory est sympa, mais ajoute le bruit de 'use (DOMCategory)'. Y a-t-il un moyen d'éviter cela?meilleure façon de gérer dom que DOMCategory?

J'ai essayé d'encapsuler l'appel de script dans un appel à 'utiliser', mais cela ne semble pas fonctionner dans les fermetures.

+0

Pouvez-vous mettre ce que vous avez essayé c'est unsatisfatory dans la question? –

Répondre

3

Vous pouvez utiliser la fonction d'exécution mixin de groovy pour mixer de façon permanente dans la catégorie. Class.mixin ajoute les méthodes applicables dans la catégorie à la métaClasse de la classe. Appliquez-le aux classes et aux interfaces qui apparaissent comme le premier paramètre de chaque méthode de catégorie, et la catégorie sera disponible sans enfermer le code dans un bloc use(DOMCategory).

Exemple:

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'] 

donne:

[someNode] 
foo 
foo 
Questions connexes