2011-02-17 97 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"/> 
相關問題