You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SoapUI/Groovy:如何在同一DOM中复制节点并赋予新名称

解决SoapUI响应节点复制并重命名生成新请求的方案

嘿,我来帮你搞定这个SoapUI里的节点处理需求!咱们可以用SoapUI自带的Groovy脚本轻松实现——毕竟Groovy对XML操作天生友好,下面是具体的步骤和代码示例:

1. 先获取并解析响应XML

首先得把你的GetDataResponse响应内容拿出来,解析成可操作的XML对象:

// 替换成你实际的测试步骤名称
def response = context.expand('${你的测试步骤名#Response}')
// 解析响应为XML对象
def xml = new XmlSlurper().parseText(response)

2. 复制指定节点并重命名

比如你要把所有dataType1节点复制一份,重命名为newDataType1,并添加到同一个DOM结构里:

// 遍历所有dataType1节点
xml.return.dataType1.each { originalNode ->
    // 在原节点的父节点下创建新命名的节点
    def newNode = new groovy.xml.Node(originalNode.parent(), 'newDataType1')
    // 把原节点的子元素(比如<img>)完整复制到新节点中
    originalNode.children().each { child ->
        newNode.append(child.clone())
    }
}

如果只需要复制单个特定节点(比如第一个dataType1),直接定位即可:

def originalNode = xml.return.dataType1[0]
def newNode = new groovy.xml.Node(originalNode.parent(), 'newDataType1')
originalNode.children().each { child ->
    newNode.append(child.clone())
}

3. 把修改后的XML转为请求格式

处理完DOM后,转成字符串并设置到目标请求步骤里:

// 将修改后的XML转为格式化字符串
def writer = new StringWriter()
new groovy.xml.XmlNodePrinter(new PrintWriter(writer)).print(xml)
def modifiedXml = writer.toString()

// 替换成你要生成新请求的测试步骤名称
context.testCase.testSteps['目标请求步骤名'].setPropertyValue('Request', modifiedXml)

4. 额外小提示

  • 如果响应里有命名空间(比如开头的soap前缀),可以用declareNamespace指定命名空间,避免解析问题:
    def xml = new XmlSlurper().parseText(response).declareNamespace(soap: 'http://schemas.xmlsoap.org/soap/envelope/')
    
  • 要是需要处理dataType2这类其他节点,只需要把代码里的节点名称替换成对应值就行。

这样操作下来,就能在同一DOM里完成节点复制重命名,直接生成符合要求的新SoapUI请求啦!

内容的提问来源于stack exchange,提问作者Alexa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:46:48