使用groovy DOMBuilder忽略空属性
Groovy有一个使用groovy DOMBuilder忽略空属性,dom,groovy,markupbuilder,Dom,Groovy,Markupbuilder,Groovy有一个ompitNullAttributes和一个ompitEmptyAttributes。但事实并非如此。这是我的密码 >>> def xml = DOMBuilder.newInstance() >>> def maybeEmpty = null >>> println xml.foo(bar: maybeEmpty) <foo bar=""/> def xml=DOMBuilder.newInstance()
ompitNullAttributes
和一个ompitEmptyAttributes
。但事实并非如此。这是我的密码
>>> def xml = DOMBuilder.newInstance()
>>> def maybeEmpty = null
>>> println xml.foo(bar: maybeEmpty)
<foo bar=""/>
def xml=DOMBuilder.newInstance()
>>>def maybeEmpty=null
>>>println xml.foo(bar:maybeEmpty)
如果是空的,我希望
条
被省略。我在回答findAll
empty属性时找到了一个解决方法,并将其删除。因为我要生成一个复杂的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"/>
def factory=groovy.xml.FactorySupport.createDocumentBuilderFactory().newDocumentBuilder()
def builder=新的DOMBuilderSubclass(工厂)
println builder.foo(bar:null,baz:1)
//
//
正如你所说的标准输出是
println groovy.xml.DOMBuilder.newInstance().foo(bar: null, baz: 1)
//<?xml version="1.0" encoding="UTF-8"?>
//<foo bar="" baz="1"/>
println groovy.xml.domguilder.newInstance().foo(bar:null,baz:1)
//
//