首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建XmlSlurper的Groovy GPath方法

创建XmlSlurper的Groovy GPath方法
EN

Stack Overflow用户
提问于 2014-04-29 18:58:25
回答 1查看 315关注 0票数 0

我正试图解析一个大型的XML文件以隐藏到一个JSON文档中,我想创建一个方法来构造XmlSlurper查找表达式,但是我遇到了问题。

下面是XML的一个片段:

代码语言:javascript
复制
<site>
  <metrics>
    <ruleScore>
      <avg>89.0</avg>
    </ruleScore>
  </metrics>
</site>

以下是一种方法:

代码语言:javascript
复制
static def getDecNode(String parentNode String childNode) {
    return data.metrics.parentNode.childNode.find { it.name() == childNode }.toDouble()
}

从那以后,我会称之为:

代码语言:javascript
复制
def root = json {
    type record
    time { $date timestamp }
    data {
        ruleScore {
            avg getDecNode("ruleScore","avg")
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-29 19:20:01

您可以使getDecNode成为一个闭包,它将允许访问脚本中显示的已解析的xml,然后构建json。还请注意闭包内部的实现(GString的使用):

代码语言:javascript
复制
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的大小,意图是不同的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23373084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档