2011-02-17 151 views
2

Groovy的MarkupBuilderomitNullAttributesomitEmptyAttributes。但DOMBuilder不。这是我的代码用groovy省略空属性DOMBuilder

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

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

回答

2

我相信,对于那些没有内置的选项,但如果你需要一个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"/> 
相关问题