当前位置: 首页 > 知识库问答 >
问题:

如何使用groovy脚本对XML标记进行循环

谢叶五
2023-03-14

我有一个名称空间如下所示的XML响应:

<tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/">
     <tns:Body>
        <svc:response xmlns:svc="http://...serviceNameSpace" 
                    xmlns:ent="http://....entitiesNameSpace">
            <svc:customerList>
                <svc:customer>
                    <svc:nonIRDAssetInformationList>
                        <svc:nonIRDAssetInformation>
                            <ent:assetId>AssetId1</ent:assetId>
                            <ent:assetSerialNumber>SerialNum1</ent:assetSerialNumber>
                            <ent:assetType>AssetType1</ent:assetType>
                        </svc:nonIRDAssetInformation>
                        <svc:nonIRDAssetInformation>
                            <ent:assetId>AssetId2</ent:assetId>
                                             <ent:assetSerialNumber>SerialNum2</ent:assetSerialNumber>
                            <ent:assetType>AssetType2</ent:assetType>
                        </svc:nonIRDAssetInformation>
                    </svc:nonIRDAssetInformationList>
                </svc:customer>
            </svc:customerList>
        </svc:response >
    </tns:Body>
</tns:Envelope>
import com.eviware.soapui.support.XmlHolder

//def holder = new XmlHolder(messageExchange.responseContentAsXml)
def Envelope = new XmlParser().parseText(messageExchange.responseContentAsXml)
def tns_ns = new groovy.xml.Namespace("http://..../envelope/", "tns")
def ent_ns = new groovy.xml.Namespace("http://..../entities/", "ent")
def svc_ns = new groovy.xml.Namespace("http://..../services", "svc")

def root = new XmlSlurper().parse(Envelope)
def serialNum= specific value is saved here
def nonIRDAssetInformationList = root.'**'.findAll{
   it.name()=='nonIRDAssetInformation'
}
nonIRDAssetInformation.each{
    it.assetSerialNumber.text().contains(serialNum)
    messageExchange.modelItem.testStep.testCase.testSuite.setPropertyValue( "ClientAssetId",it.assetId.text() as String);
}

方法:groovy.util.xmlslurper.parse()的签名不适用于参数类型:(groovy.util.node)值:[{http://schemas.xmlsoap.org/soap/envelope/}信封[attributes={};value=[{http://schemas.xmlsoap.org/soap/envelope/}header[attributes={};.....

有没有人能帮我解决这个问题。

共有1个答案

郎恺
2023-03-14

您似乎试图解析已经解析的结果(不确定原因)

像这样的东西应该对你有用:

import groovy.xml.*

def envelope = new XmlSlurper().parseText(messageExchange.responseContentAsXml)
def serialNum = 'Num'

envelope.'**'
        .findAll { it.name() == 'nonIRDAssetInformation' }
        .findAll { it.assetSerialNumber.text().contains(serialNum) }
        .each {
            println it.assetId.text()
        }
 类似资料:
  • 为更具表现力、更可控的构建而组合使用 Ant 和 Groovy Ant 和 Maven 两者在构建处理工具的世界中占统治地位。但是 XML 却凑巧是一种非常没有表现力的配置格式。在“实战 Groovy”这个新系列的第 2 期中,Andrew Glover 将介绍 Groovy 的生成器实用工具,这个工具能够极其容易地把 Groovy 与 Ant 和 Maven 结合在一起,形成更具表现力、更可控的

  • nit.java:593nit.java:569AntlrParserPorg.codehaus.groovy.control.CSTIntoAST(AntlrParserPnit.compile)在nit.java:546AntlrParserPgroovy.lang.CST(AntlrParserPoader.do)在oader.java:298SourceUnit.parse(SourceU

  • 问题内容: 我有一个普通的脚本,我想在Java中执行它。有人可以为我提供更多有关如何实现此目的的文档/示例吗? 问题答案: 基本的Java + Groovy集成: 请参阅本文以获取更多从Java调用Groovy的方法 PS: 您需要包括如在Java程序中,例如:

  • 问题内容: 我可以使用Groovy脚本获取响应xml。我需要获取请求XML,因为我需要在soap ui测试中添加“断言脚本”。 我正在使用以下代码来获取响应xml 但是我不确定如何获取SOAPUI的请求xml。谁能帮我获得SOPAUI的请求xml吗? 问题答案: 要以字符串形式获取请求内容,可以使用 有关SoapUI API的更多信息,请访问http://www.soapui.org/apidoc

  • 我有一个测试步骤,其中包含两个断言。 非SOAP错误 包含。条件是响应应包含“消息发送成功” 现在我有一个Groovy脚本,从那里我执行这个测试步骤。使用这个Groovy脚本,我需要打印断言名称、值和状态。以下是我编写的代码: 但在输出中,它显示如下: 如您所见,我可以打印断言名称和状态,但不能打印“包含”断言的值。请帮助我如何获取特定断言的值。 提前谢谢。