0

属性を解析するとき、属性が見つからない場合、slurper は空の文字列を設定します。

たとえば、car.setOwner(node.@owner.text());

上記のコードでは、所有者属性が見つからない場合、slurper は空白文字列 ("") を設定します。

私の場合、空の文字列を設定するよりも、null のままにしておきます。

これを行わないように Slurper を設定することは可能ですか?

4

2 に答える 2

1

構成Meta Object Protocol (MOP)の使用を区別すると、説明したように XmlSlurper を構成することはできないと言えますが、MOP を使用することは可能です。

構成については、次の点に注意してください。

def node = new XmlSlurper().parseText('<car>No Owner</car>' )

def attr = node.@owner
assert groovy.util.slurpersupport.Attributes == attr.getClass()

(この場合は Groovy 2.2.2)のコードを見ると、 nullAttributes.text()を返すように構成できないことが明らかです。

MOP の場合、元のAttributes.text()メソッドをキャプチャしてオーバーライドできます。

import groovy.util.slurpersupport.*

def originalText = Attributes.metaClass.getMetaMethod("text")

Attributes.metaClass.text = { ->
    def result = originalText.invoke(delegate)
    if (result.isEmpty()) {
        result = null
    }
    result
}

// no owner
def node = new XmlSlurper().parseText('<car>No Owner</car>')
def attr = node.@owner
assert null == attr.text()

// with owner
node = new XmlSlurper().parseText('<car owner="codetojoy"></car>')
attr = node.@owner
assert "codetojoy" == attr.text()
于 2014-05-28T02:03:45.447 に答える