2016-08-22 38 views
1

我正在使用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

剛編輯它添加更多相關的代碼和信息 –

回答

1

請看下面的例子重:遍歷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 
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, [email protected]"$it"*.text()*.asType(Integer).sum()] 
} 

assert result == [pass:20, fail:56] 
相關問題