2

Groovy のMarkupBuilderにはomitNullAttributesと がありomitEmptyAttributesます。しかし、DOMBuilderはそうではありません。これは私が持っているコードです

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

bar空の場合は省略したい。Groovy AntBuilderへの回答で回避策を見つけました。条件付き属性を省略して...属性をfindAll空にして削除します。複雑な DOM を生成する必要があるため、他のオプションを探しています。

4

1 に答える 1

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"/>
于 2011-02-18T17:49:20.833 に答える