лучший способ справиться с DOM, чем DOMCategory? - PullRequest
2 голосов
/ 30 мая 2010

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

Я попытался заключить вызов сценария в вызов 'use', но, похоже, это не работает в замыканиях.

1 Ответ

4 голосов
/ 01 июня 2010

Вы можете использовать функцию Groovy 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...