Groovy: как вставить узел в начало списка элементов в XML, прочитанном с помощью XMLSlurper ()

Возможно, я упустил что-то очевидное, так как я новичок в Groovy, но я искал, но не нашел того, что искал. У меня есть тестовый класс, в котором я читаю XML; Я хочу вставить элемент в начало ряда элементов. Я выяснил, как заменить первый элемент, и я понял, как добавить узел в конец списка, но я не могу понять, как для вставки элемента в начало списка (или, в идеале, в любую произвольную позицию).

Например:

@Test
void foo()
{
    def xml = """<container>
                   <listofthings>
                       <thing id="100" name="foo"/>
                   </listofthings>
                 </container>"""

    def root = new XmlSlurper().parseText(xml)
    root.listofthings.thing[0].replaceNode ( { thing(id:101, name:'bar') })
    root.listofthings.appendNode  ( { thing(id:102, name:'baz') })

    def outputBuilder = new groovy.xml.StreamingMarkupBuilder()
    String result = outputBuilder.bind { mkp.yield root }
    print result
}

, что дает:

<container>
   <listofthings>
     <thing id='101' name='bar'/>
     <thing id='102' name='baz'/>
   </listofthings>
</container>

Я действительно хочу вставить узел в начало из listofthings , то есть что-то, что заменит вызов replaceNode , который вместо этого вставит вещь с идентификатором 101 перед вещью с идентификатором 100. Я бы также хотел сказать, что имел более длинный список, чтобы вставить узел после n-го элемента.

(Кстати, есть ли способ получить вывод в более удобочитаемом формате? Вывод из StreamingMarkupBuilder все заканчивается как одна строка текста; Я переформатировал его для ясности выше)

Изменить: я использую версию 1.7.5, которая поставляется вместе с Eclipse, если это имеет значение.

5
задан Eric Asberry 29 June 2011 в 19:21
поделиться