Jak mogę znaleźć wszystkie elementy w XML według ich nazwy znacznika w Groovy (GPath)?

Muszę znaleźć wszystkie car elementy w tym dokumencie:

<records>
  <first>
    <car>
      <id>378932</id>
    </car>
  </first>
  <second>
    <foo>
      <car>
       <name>audi</name>
      </car>
    </foo>
  </second>
</records>

Oto, co próbowałem i nie udało mi się:

def xml = new XmlSlurper().parse(file)
assert xml.car.size() == 2
20
yegor256 18 lipiec 2011, 00:32
1
Identyfikator nie został poprawnie zamknięty
 – 
Pankaj Shinde
8 lipiec 2015, 11:31

3 odpowiedzi

Najlepsza odpowiedź

Tak to działa:

def xml = new XmlSlurper().parse(file)
def cars = xml.depthFirst().findAll { it.name() == 'car' }
assert cars.size() == 2
34
yegor256 18 lipiec 2011, 05:54
Rzeczywiście :) Trochę to zajęło, ale teraz jestem też gościem od Grails :) Dzięki za pomoc, przegłosowałem twoją odpowiedź. Jednak ten właściwy jest mój.
 – 
yegor256
18 lipiec 2011, 06:02

Możesz także zrobić:

def xml = new XmlSlurper().parse(file)
def cars = xml.'**'.findAll { it.name() == 'car' }
15
tim_yates 18 lipiec 2011, 11:52

Użyj XMLSlurper

def records = new XmlSlurper().parseText(file)
reco​rds.depthFirst()​.findAll { !it.childNodes() && it.car} ​

/*Otherwise this returns the values for parent nodes as well*/
5
Igor 9 październik 2014, 19:13
 – 
Ethan Shepherd
18 lipiec 2011, 00:49
Dzięki, wiem, jakiej klasy użyć. Czy mógłbyś wyjaśnić, jak dokładnie mogę znaleźć wszystkie elementy po danym tagu?
 – 
yegor256
18 lipiec 2011, 01:13
Twój przykładowy kod nie działa. Zwraca wszystkie elementy, nie tylko car-s. Testowałeś to?
 – 
yegor256
18 lipiec 2011, 05:48