Я пошел по аналогичному пути к danb, но столкнулся с проблемами при фактической распечатке результирующего XML. Затем я понял, что NodeList, который был возвращен путем запроса корня для всех его «автомобильных» дочерних элементов, не совпадает с тем, что вы получаете, просто запрашивая дочерние элементы root. Несмотря на то, что в этом случае они оказываются одинаковыми списками, их не всегда было бы, если бы под корнем находились не «автомобильные» дети. Из-за этого изменение списка автомобилей, которые возвращаются из запроса, не влияет на первоначальный список.
Вот решение, которое добавляет и переупорядочивает:
def CAR_RECORDS = '''
<records>
<car name='HSV Maloo' make='Holden' year='2006'/>
<car name='P50' make='Peel' year='1962'/>
<car name='Royale' make='Bugatti' year='1931'/>
</records>
'''
def carRecords = new XmlParser().parseText(CAR_RECORDS)
def cars = carRecords.children()
def royale = cars.find { it.@name == 'Royale' }
cars.remove(royale)
cars.add(0, royale)
def newCar = new Node(carRecords, 'car', [name:'My New Car', make:'Peel', year:'1962'])
assert ["Royale", "HSV Maloo", "P50", "My New Car"] == carRecords.car*.@name
new XmlNodePrinter().print(carRecords)
Утверждение с правильно упорядоченными машинами проходит, и XmlNodePrinter выводит:
<records>
<car year="1931" make="Bugatti" name="Royale"/>
<car year="2006" make="Holden" name="HSV Maloo"/>
<car year="1962" make="Peel" name="P50"/>
<car name="My New Car" make="Peel" year="1962"/>
</records>