2013-09-26 55 views
0

我有以下情形的問題GpathResult:的XmlSlurper在Groovy腳本---插入節點使用外部封鎖

- 我有一個GPathResult「身體」,而我要追加一些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> 
    <node1>value</node1> 
    <node2> 
    <child>childValue</child> 
    </node2> 
    <node3>value3</node3> 
<body> 
... 

但是結果完全從結果中丟失,所以我猜我的外部封閉「commonNode()」的方式有問題。

希望有人有答案。讓我知道你是否需要進一步的細節。

回答

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) 
+0

及時和有用的答案。我只有一個好奇心:我的語法和你的語法之間有什麼功能差異:child(「childvalue」)與child「childValue」相比較嗎? – Shinoko

+0

@Shinoko不,它是一樣的:-)這種情況下的括號是可選的:-) –

+0

也可以有一個參數嗎?在例子中,子節點(「childValue」)的值在調用閉包時作爲字符串發送。需要更改哪些代碼? – Shinoko