2016-08-22 7 views
1

Я использую gpath для разбора xml. Я хочу вывести значения pass/fail из объекта 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

Рассмотрим следующий пример: 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 += ([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]