SoapUI/Groovy-如何复制节点?
我只想在SoapUI中使用groovy脚本来复制一个简单的节点并重命名它。但我不知道该怎么做 输入xml如下所示:SoapUI/Groovy-如何复制节点?,groovy,soapui,Groovy,Soapui,我只想在SoapUI中使用groovy脚本来复制一个简单的节点并重命名它。但我不知道该怎么做 输入xml如下所示: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <a> <aa>...</aa> </a> <a> <aa>...&l
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<a>
<aa>...</aa>
</a>
<a>
<aa>...</aa>
</a>
<b>
<bb>...</bb>
</b>
<b>
<bb>..</bb>
</b>
</soap:Body>
但是我得到了一个groovy.lang.MissingMethodException:没有方法签名:org.apache.xmlbeans.impl.store.Xobj$ElementXobj.depthFirst()适用于参数类型:()值:[]第34行错误
与
我获得了一个groovy.lang.GroovyRuntimeException:Cannot read-write-only属性:name
import groovy.xml.XmlUtil
import groovy.xml.XmlUtil
def root = new XmlParser().parseText('''<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<a>
<aa>...</aa>
</a>
<b>
<bb>111</bb>
</b>
<b>
<bb><cc>222</cc></bb>
</b>
</soap:Body>
</soap:Envelope>''')
def xclone(Node n){
return new XmlParser().parseText(XmlUtil.serialize(n))
}
root.depthFirst().each{e->
if(e.name()=='bb'){
def e2 = xclone(e)
e2.name = 'bb2'
e.parent()?.append( e2 )
}
}
println XmlUtil.serialize(root)
def root=new XmlParser().parseText(“”)
...
111
222
''')
def xclone(节点n){
返回新的XmlParser().parseText(XmlUtil.serialize(n))
}
root.depthFirst()。每个{e->
如果(例如name()=='bb'){
def e2=xclone(e)
e2.name='bb2'
e、 父项()?.append(e2)
}
}
println XmlUtil.serialize(根)
结果
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<a>
<aa>...</aa>
</a>
<b>
<bb>111</bb>
<bb2>111</bb2>
</b>
<b>
<bb>
<cc>222</cc>
</bb>
<bb2>
<cc>222</cc>
</bb2>
</b>
</soap:Body>
</soap:Envelope>
...
111
111
222
222
返回,它与groovy节点不同。因此,您必须检查相应的文档
requestHolder.getDomNodes( "//b" ).each{e->
if(e.name()=='bb'){
def e2 = xclone(e)
e2.name = 'bb2'
e.parent()?.append( e2 )
}
}
import groovy.xml.XmlUtil
def root = new XmlParser().parseText('''<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<a>
<aa>...</aa>
</a>
<b>
<bb>111</bb>
</b>
<b>
<bb><cc>222</cc></bb>
</b>
</soap:Body>
</soap:Envelope>''')
def xclone(Node n){
return new XmlParser().parseText(XmlUtil.serialize(n))
}
root.depthFirst().each{e->
if(e.name()=='bb'){
def e2 = xclone(e)
e2.name = 'bb2'
e.parent()?.append( e2 )
}
}
println XmlUtil.serialize(root)
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<a>
<aa>...</aa>
</a>
<b>
<bb>111</bb>
<bb2>111</bb2>
</b>
<b>
<bb>
<cc>222</cc>
</bb>
<bb2>
<cc>222</cc>
</bb2>
</b>
</soap:Body>
</soap:Envelope>