解析属性时,当找不到属性时,slurper会设置一个空字符串。
例如,car.setOwner(node.@owner.text());
在上面的代码中,如果找不到owner属性,那么slurper会设置一个空字符串(“”)。
就我而言,我宁愿把它留空而不是设置一个空字符串。
是否可以配置Slurper不这样做?
答案 0 :(得分:2)
你可以做到
car.setOwner(node.@owner.text() ?: null)
答案 1 :(得分:1)
如果我们区分 configure 和使用元对象协议(MOP),那么我们可以说明不可以配置您描述的是XmlSlurper,但 可以使用MOP。
对于configure,请注意以下事项:
def node = new XmlSlurper().parseText('<car>No Owner</car>' )
def attr = node.@owner
assert groovy.util.slurpersupport.Attributes == attr.getClass()
如果您Attributes.text()
Attributes.text()
(在本例中为Groovy 2.2.2),很明显这不能配置为返回null。
对于MOP,我们可以捕获原始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()
方法,然后覆盖它:
{{1}}