gpath从相同名称的对象中访问数据

问题描述:

我正在使用gpath来分析xml。我想从stat对象中获取通过/失败值。我遇到的问题是对象被分组在一起。我无法单独访问它们。gpath从相同名称的对象中访问数据

这是我正在使用的数据。

<robot> 
<statistics> 
    <total> 
    <stat fail="28" pass="10">Critical Tests</stat> 
    <stat fail="28" pass="10">All Tests</stat> 
    </total> 
</statistics> 
</robot> 

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

*印刷(stats.size())返回1次

印刷(stats.stat ['@传])返回1010

澄清统计信息是一级gpath对象。

这似乎只是在连接两个不同的“统计”

谢谢!

编辑:

这是我现在的代码。

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'] 
     } 
    } 
+0

你能告诉你的代码? –

+0

刚编辑它添加更多相关的代码和信息 –

请看下面的例子重:遍历stat节点(和计算总计):

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 += ([email protected]'pass'.text() as int) 
    totalFail += ([email protected]'fail'.text() as int) 
} 

println "totalPass: " + totalPass 
println "totalFail: " + totalFail 

或者你可以这样做:

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, [email protected]"$it"*.text()*.asType(Integer).sum()] 
} 

assert result == [pass:20, fail:56]