【发布时间】:2011-06-29 19:14:57
【问题描述】:
我可能遗漏了一些明显的东西,因为我是 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 的 beginning 处插入一个节点,即替换对 replaceNode 的调用的东西在 id 为 100 的东西之前插入 id 为 101 的东西。如果说我有一个更长的列表,在第 n 个元素之后插入一个节点,我也会很好。
(顺便说一句,有没有办法以更易读的格式获取输出?StreamingMarkupBuilder 的输出都以单行文本结束;为了清楚起见,我在上面重新格式化了)
编辑:我使用的是 1.7.5,它与 Eclipse 捆绑在一起,如果重要的话。
【问题讨论】: