我试图解析一个大型XML文件以转换为JSON文档,并且我想创建一个构造XmlSlurper查找表达式的方法,但我遇到了麻烦。
以下是XML的摘录:
<site>
<metrics>
<ruleScore>
<avg>89.0</avg>
</ruleScore>
</metrics>
</site>
以下是方法:
static def getDecNode(String parentNode String childNode) {
return data.metrics.parentNode.childNode.find { it.name() == childNode }.toDouble()
}
从那里我会称之为:
def root = json {
type record
time { $date timestamp }
data {
ruleScore {
avg getDecNode("ruleScore","avg")
}
}
}
答案 0 :(得分:1)
您可以使getDecNode
成为一个闭包,允许访问脚本中存在的已解析的xml,然后构建json。另请注意,闭包内部的实现(使用GString):
def xml='''
<site>
<metrics>
<ruleScore>
<avg>89.0</avg>
</ruleScore>
</metrics>
</site>
'''
def slurper = new XmlSlurper().parseText(xml)
def getDecNode = {String parentNode, String childNode ->
slurper.metrics."$parentNode"
."$childNode"
.find { it.name() == childNode }
.toDouble()
}
//Building JSON
def builder = new groovy.json.JsonBuilder()
builder {
type 'record'
time { $date 'timestamp' }
data {
ruleScore {
avg getDecNode("ruleScore","avg")
}
}
}
builder.toPrettyString()
上面的注释,我假设JSON元素值为字符串,因此'record'
,'timestamp'
。它们可以根据要求进行更换。
我无法预见方法/闭包的单独实现规划带来的好处,但我认为基于xml的大小,意图会有所不同。