我正试图解析一个大型的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")
}
}
}发布于 2014-04-29 19:20:01
您可以使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元素值是String,因此是'record','timestamp'。它们可以根据要求更换。
我无法预见方法/闭包的单独实现规划的好处,但我认为基于xml的大小,意图是不同的。
https://stackoverflow.com/questions/23373084
复制相似问题