格罗维的标记生成器 http://groovy.codehaus.org/api/groovy/xml/MarkupBuilder.html has an omitNullAttributes
and an omitEmptyAttributes
. But DOM生成器 http://groovy.codehaus.org/api/groovy/xml/DOMBuilder.html没有。这是我的代码
>>> def xml = DOMBuilder.newInstance()
>>> def maybeEmpty = null
>>> println xml.foo(bar: maybeEmpty)
<foo bar=""/>
I want bar
如果为空则省略。我在答案中找到了解决方法Groovy AntBuilder,省略条件属性... https://stackoverflow.com/questions/4692087/groovy-antbuilder-omit-conditional-attributes-like-setomitnullattributes-func to findAll
清空属性并删除它们。由于我要生成一个复杂的 DOM,所以我正在寻找其他选项。
我相信没有内置选项,但如果您需要 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"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)