我有以下关闭:
def myData = {
mkp.xmlDeclaration()
OneEntry() {
SecondInnerEntry()
}
}
我可以使用StreamingMarkupBuilder
(省略导入)序列化其XML表示:
System.out << XmlUtil.serialize(new StreamingMarkupBuilder().bind(myData))
哪位给我:
<?xml version="1.0" encoding="UTF-8"?>
<OneEntry>
<SecondInnerEntry/>
</OneEntry>
但是现在我想在调用bind()
的{{1}}方法之前添加一个新条目来获取:
StreamingMarkupBuilder
我该怎么做(即操纵闭包来插入一个新节点,我不想重新创建整个<?xml version="1.0" encoding="UTF-8"?>
<OneEntry>
<FirstInnerEntry/>
<SecondInnerEntry/>
</OneEntry>
只插入一个元素)?
答案 0 :(得分:2)
不改变myData
(如erimerturk所述),或执行两次传递,即:
myData
XmlParser
我不认为这是可能的..问题归结为:
如何在现有闭包中插入语句
简单的回答是“你不能”*
(*有可能通过AST转换做你正在尝试的事情,但我觉得在这种情况下可能不可能)
答案 1 :(得分:0)
以下解决方案适用于我的具体案例,但没有完全回答问题(即行走和修改闭包)
import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
def dataToInsert = {
FirstInnerEntry()
}
def myData = {
mkp.xmlDeclaration()
OneEntry() {
mkp.yield dataToInsert
SecondInnerEntry()
}
}
System.out << XmlUtil.serialize(new StreamingMarkupBuilder().bind(myData))