Возможно, я упустил что-то очевидное, так как я новичок в 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, если это имеет значение.