首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy markupBuilder更新父节点

Groovy markupBuilder更新父节点
EN

Stack Overflow用户
提问于 2013-10-03 10:01:01
回答 1查看 715关注 0票数 1

我正在使用MarkupBuilder构建xml,并想知道如何在创建子节点时更新父属性。假设生成父元素时无法计算子元素的数量。

代码语言:javascript
复制
 def writer = new StringWriter()
 def xml = new MarkupBuilder(writer)

 xml.parent(totalDuration: 'should be: some of all child duration') {
     child(duration: '1')
     child(duration: '2') 
...  
 }

是否有一种从子节点访问父节点的优雅方法?

谢谢塔尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 10:55:04

是否有一种从子节点访问父节点的优雅方法?

而不是使用MarkupBuilder,它以流的方式生成XML (在调用嵌套闭包之前,它已经将父元素的开始标记写入输出流)。但是您可以使用DOMBuilder在内存中构建DOM树,然后使用DOM填充总计,最后序列化DOM树,包括total:

代码语言:javascript
复制
import groovy.xml.*
import groovy.xml.dom.*
import org.w3c.dom.*

def dom = DOMBuilder.newInstance(false, true)
Element parent = dom.parent() {
  child(duration:'1')
  child(duration:'2')
}
use(DOMCategory) {
  parent.setAttributeNS(null, "totalDuration",
                        parent.xpath('sum(child/@duration)'))
}

def xmlString = XmlUtil.serialize(parent)

只要在闭包中不使用DOMBuilder或mkp.yieldUnescaped,MarkupBuilder就应该与MarkupBuilder一样工作。如果您需要使用这些属性,那么您必须在没有totalDuration属性的情况下构建XML字符串,然后将其重新解析为DOM,添加额外的属性并重新序列化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19156260

复制
相关文章

相似问题

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