我有以下结论:
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()方法StreamingMarkupBuilder之前添加一个新条目以获得:
<?xml version="1.0" encoding="UTF-8"?>
<OneEntry>
<FirstInnerEntry/>
<SecondInnerEntry/>
</OneEntry>我如何做到这一点(即操纵闭包插入一个新节点,我不想重新创建整个myData,只插入一个元素)?
发布于 2011-11-22 14:50:59
不更改myData (如erimerturk所说),或执行两次传递,即:
使用myData
XmlParser
我觉得这不可能..。这个问题归结为:
如何在现有闭包中间插入语句
简单的答案是“你不能”*
(*也许可以通过AST转换来做您正在尝试的事情,但我觉得在这种情况下可能不可能这样做)
发布于 2011-11-22 21:28:55
下面的解决方案适用于我的具体情况,但没有完全回答这个问题(即走和修改闭包)
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))https://stackoverflow.com/questions/8227586
复制相似问题