首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从同名对象访问数据的gpath

从同名对象访问数据的gpath
EN

Stack Overflow用户
提问于 2016-08-22 20:45:43
回答 2查看 116关注 0票数 1

我正在使用gpath解析xml。我想从stat对象中提取pass/fail值。我遇到的问题是,这些对象正在被组合在一起。我不能单独访问它们。

这是我正在处理的数据。

代码语言:javascript
复制
<robot>
<statistics>
  <total>
    <stat fail="28" pass="10">Critical Tests</stat>
    <stat fail="28" pass="10">All Tests</stat>
  </total>
</statistics>
</robot>

在检查groovy在这些对象中看到什么时

*打印(stats.size())返回1

打印(stats.stat'@pass)返回1010

要澄清统计数据,需要在级别上使用gpath对象。

它似乎简单地将两个不同的“统计”连接在一起。

谢谢!

编辑:

这是我现在的密码。

代码语言:javascript
复制
def stats = robot.statistics.total
    println(stats.size())
    println(stats.stat['@pass'])
    for (int i = 0; i < stats.size(); i++) {
        println(stats[i].stat)
        if (stats[i].stat == "All Tests") {
            println('i am here')
            println(stats[i].stat['@pass'])
            int totalPass = stats[i].stat['@pass']
            int totalFail = stats[i].stat['@fail']
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-22 23:16:55

考虑以下示例re:在stat节点上迭代(并计算总计):

代码语言:javascript
复制
def xml = """
<robot>
<statistics>
  <total>
    <stat fail="28" pass="10">Critical Tests</stat>
    <stat fail="28" pass="10">All Tests</stat>
  </total>
</statistics>
</robot>
"""

def robot = new XmlSlurper().parseText(xml)

int totalPass = 0
int totalFail = 0

robot.statistics.total.stat.each { statNode -> 
    println "processing: " + statNode.text()
    totalPass += (statNode.@'pass'.text() as int)
    totalFail += (statNode.@'fail'.text() as int) 
} 

println "totalPass: " + totalPass
println "totalFail: " + totalFail
票数 1
EN

Stack Overflow用户

发布于 2016-08-23 08:56:13

或者你可以:

代码语言:javascript
复制
def xmlText = """
<robot>
<statistics>
  <total>
    <stat fail="28" pass="10">Critical Tests</stat>
    <stat fail="28" pass="10">All Tests</stat>
  </total>
</statistics>
</robot>
"""

def xml = new XmlSlurper().parseText(xmlText)

def result = ['pass', 'fail'].collectEntries {
    [it, xml.statistics.total.stat.@"$it"*.text()*.asType(Integer).sum()]
}

assert result == [pass:20, fail:56]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39088449

复制
相关文章

相似问题

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