1

我正在使用 gpath 来解析 xml。我想从 stat 对象中提取通过/失败值。我遇到的问题是对象被组合在一起。我无法单独访问它们。

这是我正在使用的数据。

<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

澄清 stats 是级别上的 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']
        }
    }
4

2 回答 2

1

考虑以下示例 re:迭代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 += (statNode.@'pass'.text() as int)
    totalFail += (statNode.@'fail'.text() as int) 
} 

println "totalPass: " + totalPass
println "totalFail: " + totalFail
于 2016-08-22T23:16:55.803 回答
1

或者你可以这样做:

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]
于 2016-08-23T08:56:13.337 回答