属性を解析するとき、属性が見つからない場合、slurper は空の文字列を設定します。
たとえば、car.setOwner(node.@owner.text());
上記のコードでは、所有者属性が見つからない場合、slurper は空白文字列 ("") を設定します。
私の場合、空の文字列を設定するよりも、null のままにしておきます。
これを行わないように Slurper を設定することは可能ですか?
属性を解析するとき、属性が見つからない場合、slurper は空の文字列を設定します。
たとえば、car.setOwner(node.@owner.text());
上記のコードでは、所有者属性が見つからない場合、slurper は空白文字列 ("") を設定します。
私の場合、空の文字列を設定するよりも、null のままにしておきます。
これを行わないように Slurper を設定することは可能ですか?
構成と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()