dom - 比 DOMCategory 更好的处理 dom 的方式?

标签 dom groovy categories

我正在尝试创建一个可以轻松使用 dom 节点的 DSL。使用 DOMCategory 很好,但会增加“use(DOMCategory)”的噪音。有办法避免这种情况吗?

我尝试将脚本调用包装在对“use”的调用中,但这似乎在闭包中不起作用。

最佳答案

您可以使用groovy的运行时mixin功能来永久混合在类别中。 Class.mixin 将类别中适用的方法添加到类的元类中。将其应用于作为每个类别方法的第一个参数出现的类和接口(interface),并且类别将可用,而无需将代码包含在 use(DOMCategory) block 中。

示例:

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

关于dom - 比 DOMCategory 更好的处理 dom 的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937611/

相关文章:

java - 如何从 groovy 调用 Java Stream.collect()?

php - 自动将产品分配到 WooCommerce 中定义的产品类别

php - 有条件地删除“添加到购物车”按钮并隐藏产品类别的价格

jquery - 导航 dom 来调整自定义 jQuery Accordion

javascript - 按程序在 DOM 中使用“下一个”和“上一个”按钮创 build 置列表

javascript - DOM 树中所有子元素的一个监听器

eclipse - 在 Groovy-Eclipse 中导入 DSL 的自定义内容

php - 如何获取其父子元素为元素 x 的元素? PHP 简单的 HTML DOM 解析器

java - 查找树的最大宽度的算法,不使用节点结构

powerbi - 将图表从类别动态更改为子类别