XML Slurper - 属性的空字符串

时间:2014-05-27 15:02:40

标签: groovy xmlslurper

解析属性时,当找不到属性时,slurper会设置一个空字符串。

例如,car.setOwner(node.@owner.text());

在上面的代码中,如果找不到owner属性,那么slurper会设置一个空字符串(“”)。

就我而言,我宁愿把它留空而不是设置一个空字符串。

是否可以配置Slurper不这样做?

2 个答案:

答案 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}}