Groovy脚本中的XmlSlurper ---使用外部闭包将节点插入GpathResult

时间:2013-09-26 10:41:52

标签: groovy closures gpath

我遇到以下情况的问题:

- 我有一个GPathResult“body”我要追加更多xml(节点和子节点) - 有些部分是常见的,所以我试图将它们保存在外部封闭“commonNode”中,我可以在任何需要的地方插入

// some more code here to get body

def commonNode = {
return {
  node2() {
     child("childValue")
   }
 }
}

body.appendNode(
 {
   node1("value1")
   commonNode()
   node3("value3")
 }
)

我打电话给XmlUtil.serialize(body)之后我想得到的是:

...
 <body>
  <node1>value</node1>
  <node2>
   <child>childValue</child>
  </node2>
  <node3>value3</node3>
 <body>
...

然而,结果完全没有结构,所以我想我调用外部闭包“commonNode()”的方式有问题。

希望有人有答案。如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

这有效:

import groovy.xml.*

def xml = '<body/>'

def body = new XmlSlurper().parseText( xml )

def commonNode = { 
    node2 {
        child "childValue"
    }
}

body.appendNode { 
    node1 "value1"
    commonNode.delegate = delegate
    commonNode()
    node3 "value3"
}

println XmlUtil.serialize( body )