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,我正在寻找其他选项。
答案 0 :(得分: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"/>