下面是我的xml,我想使用groovy语言获取属性值,以便可以在SoapUI断言中使用它
<testns:TestResult attr1="100" attr2:"Sample">
<testns:TestToken>XXXXXX</testns:TestToken>
</testns:TestResult>
我想获取attr1和attr2的值。
答案 0 :(得分:0)
XML有2个问题,它是无效的
attr2:"Sample" should be attr2="Sample"
testns is not declared , it should be xmlns:testns="http://www.sample.com
所以正确的XML是
<testns:TestResult xmlns:testns="http://www.sample.com" attr1="100" attr2="Sample">
<testns:TestToken>XXXXXX</testns:TestToken>
</testns:TestResult>
假设此XML的名称为** Request1 **
因此可以获取该属性的常规代码是
def req=groovyUtils.getXmlHolder("Request1#Request")
def attr1=req.getNodeValue("//*:TestResult/@attr1")
log.info "Value of attr1 is " + attr1
def attr2=req.getNodeValue("//*:TestResult/@attr2")
log.info "Value of attr2 is " + attr2
可以获取属性的代码是xpath ** // *:TestResult / @ attr2 **
如果XML是作为响应存储的,则可以使用Request1# Response 代替Request。
另外,如果要在标签之间获取价值,请使用以下代码
def testtoken=req.getNodeValue("//*:TestResult/*:TestToken")
log.info "Value of testtoken is " + testtoken
答案 1 :(得分:0)
正如Guarav正确回答了,我想补充一件事。我认为问题是当涉及名称空间时如何从XML获取值。请参考下面的示例代码
def holderRawReqToken = groovyUtils.getXmlHolder(response1.toString())
holderRawReqToken.declareNamespace('dns4','http://Yournamespaceurl')
holderRawReqToken.declareNamespace('dns3','http://Yournamespaceurl')
holderRawReqToken.declareNamespace('soapenv','http://schemas.xmlsoap.org/soap/envelope/')
responseVaIdToken = holderRawReqToken.getNodeValue("/soapenv:Envelope[1]/soapenv:Body[1]/dns3:CreateTokenResponse[1]/dns4:tokenInformation[1]/dns4:tokenValue[1]/text()")