首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在StreamingMarkupBuilder使用的闭包中添加节点

如何在StreamingMarkupBuilder使用的闭包中添加节点
EN

Stack Overflow用户
提问于 2011-11-22 13:27:39
回答 2查看 1K关注 0票数 1

我有以下结论:

代码语言:javascript
复制
def myData = {
    mkp.xmlDeclaration()
    OneEntry() {
        SecondInnerEntry()
    }
}

我可以用StreamingMarkupBuilder (导入省略)序列化它的XML表示:

代码语言:javascript
复制
System.out << XmlUtil.serialize(new StreamingMarkupBuilder().bind(myData))

这给了我:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<OneEntry>
  <SecondInnerEntry/>
</OneEntry>

但是现在我想在调用bind()方法StreamingMarkupBuilder之前添加一个新条目以获得:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<OneEntry>
  <FirstInnerEntry/>
  <SecondInnerEntry/>
</OneEntry>

我如何做到这一点(即操纵闭包插入一个新节点,我不想重新创建整个myData,只插入一个元素)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-22 14:50:59

不更改myData (如erimerturk所说),或执行两次传递,即:

使用myData

  • parse生成xml,使用XmlParser

  • insert生成xml,在所需的location

  • write上生成节点--新的xml

我觉得这不可能..。这个问题归结为:

如何在现有闭包中间插入语句

简单的答案是“你不能”*

(*也许可以通过AST转换来做您正在尝试的事情,但我觉得在这种情况下可能不可能这样做)

票数 2
EN

Stack Overflow用户

发布于 2011-11-22 21:28:55

下面的解决方案适用于我的具体情况,但没有完全回答这个问题(即走和修改闭包)

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8227586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档