【问题标题】:Omit empty attributes with groovy DOMBuilder使用 groovy DOMBuilder 省略空属性
【发布时间】:2011-02-17 18:11:26
【问题描述】:

Groovy 的MarkupBuilder 有一个omitNullAttributes 和一个omitEmptyAttributes。但是DOMBuilder 没有。这是我的代码

>>> def xml = DOMBuilder.newInstance()
>>> def maybeEmpty = null
>>> println xml.foo(bar: maybeEmpty)
<foo bar=""/>

如果bar 为空,我希望省略。我在Groovy AntBuilder, omit conditional attributes...findAll 空属性的答案中找到了解决方法并将它们删除。由于我要生成一个复杂的 DOM,我正在寻找其他选项。

【问题讨论】:

    标签: dom groovy markupbuilder


    【解决方案1】:

    我相信没有内置选项,但如果您需要一个 DOMBuilder,您可以将其子类化并过滤属性...

    @groovy.transform.InheritConstructors
    class DOMBuilderSubclass extends groovy.xml.DOMBuilder {
        @Override
        protected Object createNode(Object name, Map attributes) {
            super.createNode name, attributes.findAll{it.value != null}
         }
    }
    

    您可能希望像在标准 DOMBuilder 中一样调整构造,这只是一个示例。

    def factory = groovy.xml.FactorySupport.createDocumentBuilderFactory().newDocumentBuilder()
    def builder = new DOMBuilderSubclass(factory)
    println builder.foo(bar: null, baz: 1)
    //<?xml version="1.0" encoding="UTF-8"?>
    //<foo baz="1"/>    
    

    你说的标准输出是……

    println groovy.xml.DOMBuilder.newInstance().foo(bar: null, baz: 1)
    //<?xml version="1.0" encoding="UTF-8"?>
    //<foo bar="" baz="1"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多