使用Groovy从soapui中具有名称空间的XML节点获取属性值

时间:2019-01-08 16:55:07

标签: groovy soapui xmlslurper

下面是我的xml,我想使用groovy语言获取属性值,以便可以在SoapUI断言中使用它

<testns:TestResult attr1="100" attr2:"Sample">
  <testns:TestToken>XXXXXX</testns:TestToken>
</testns:TestResult>

我想获取attr1和attr2的值。

2 个答案:

答案 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

enter image description here

答案 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()")