fork(3) download
  1. def xmlString = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <SearchRS>
  3. <SearchStatus>SUCCESS</SearchStatus>
  4. <Itinerary>
  5. <Name>Joe</Name>
  6. <Ticket>111.11</Ticket>
  7. <Taxes>1.11</Taxes>
  8. </Itinerary>
  9. <Itinerary>
  10. <Name>Bob</Name>
  11. <Ticket>222.22</Ticket>
  12. <Taxes>2.22</Taxes>
  13. </Itinerary>
  14. <Itinerary>
  15. <Name>Joe</Name>
  16. <Ticket>333.33</Ticket>
  17. <Taxes>3.33</Taxes>
  18. </Itinerary>
  19. <Itinerary>
  20. <Itinerary>
  21. <Name>Bob</Name>
  22. <Ticket>444.44</Ticket>
  23. <Taxes>4.44</Taxes>
  24. </Itinerary>
  25. <Name>Joe</Name>
  26. <Ticket>0.0</Ticket>
  27. <Taxes>0.0</Taxes>
  28. </Itinerary>
  29. </SearchRS>"""
  30.  
  31. def xml = new XmlSlurper().parseText(xmlString)
  32. def names = xml.'**'.findAll {it.name() == 'Name'}.unique()
  33. def map = [:]
  34. names.each { name ->
  35. map[name] = xml.'**'.findAll {it.name() == 'Itinerary' && name == it.Name.text() }.collect { Double.parseDouble(it.Ticket.text()) + Double.parseDouble(it.Taxes.text())}.findAll {it}.with { sum() / size() }
  36. }
  37. println map
Success #stdin #stdout 1.1s 94448KB
stdin
Standard input is empty
stdout
[Joe:224.44, Bob:336.65999999999997]