使用Groovy在SoapUI中使用Xpath查询在XML节点中使用xsi获取属性值
请在下面找到我正在使用的XML,我需要在中提取使用Groovy在SoapUI中使用Xpath查询在XML节点中使用xsi获取属性值,groovy,soapui,Groovy,Soapui,请在下面找到我正在使用的XML,我需要在中提取mobileNumberVerified的状态以进行断言验证 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope" xmlns:xsd="http://www.w3.org/2001/XMLS
mobileNumberVerified
的状态以进行断言验证
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<AccountVerifyResponse xmlns="myservice url">
<mobileNumberVerified xsi:nil="true" region="+91" />
</AccountVerifyResponse>
</soapenv:Body>
</soapenv:Envelope>
我尝试了xpath查询“//soapenv:Envelope[1]/soapenv:Body[1]/*:AccountVerifyResponse/*:mobileNumberVerified[1]/@*”
-我收到了预期的“+91”
对于xpath查询
“//soapenv:Envelope[1]/soapenv:Body[1]/*:AccountVerifyResponse/*:mobilenumberververified[1]/@xsi:nil”
-我得到了“路径解析器异常”错误您可能因为没有设置名称空间而犯了错误,下面给出了xpath和XQuery获取属性值和标记值的示例
获取属性值的步骤
Groovy:
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Add").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
log.info "Value of attribute is " + attr1
log.info "Value of attribute is " + attr2
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Sample").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def value = holder.getNodeValue('//ns1:mobileNumberVerified/text()')
log.info value
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def node = holder.getNodeValue("//ns1:mobileNumberVerified/text()")
//assert node==null
//assert node!=null
declare namespace ns1='myservice url';
declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope';
for $x in //ns1:AccountVerifyResponse
return
<status>{$x/ns1:mobileNumberVerified/text()}</status>
脚本断言:
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Add").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
log.info "Value of attribute is " + attr1
log.info "Value of attribute is " + attr2
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Sample").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def value = holder.getNodeValue('//ns1:mobileNumberVerified/text()')
log.info value
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def node = holder.getNodeValue("//ns1:mobileNumberVerified/text()")
//assert node==null
//assert node!=null
declare namespace ns1='myservice url';
declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope';
for $x in //ns1:AccountVerifyResponse
return
<status>{$x/ns1:mobileNumberVerified/text()}</status>
获取节点值的步骤
Groovy:
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Add").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
log.info "Value of attribute is " + attr1
log.info "Value of attribute is " + attr2
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Sample").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def value = holder.getNodeValue('//ns1:mobileNumberVerified/text()')
log.info value
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def node = holder.getNodeValue("//ns1:mobileNumberVerified/text()")
//assert node==null
//assert node!=null
declare namespace ns1='myservice url';
declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope';
for $x in //ns1:AccountVerifyResponse
return
<status>{$x/ns1:mobileNumberVerified/text()}</status>
脚本断言:
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Add").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
log.info "Value of attribute is " + attr1
log.info "Value of attribute is " + attr2
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Sample").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def value = holder.getNodeValue('//ns1:mobileNumberVerified/text()')
log.info value
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def node = holder.getNodeValue("//ns1:mobileNumberVerified/text()")
//assert node==null
//assert node!=null
declare namespace ns1='myservice url';
declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope';
for $x in //ns1:AccountVerifyResponse
return
<status>{$x/ns1:mobileNumberVerified/text()}</status>
您可以使用groovy将值存储到属性中,也可以使用PropertyTransfer
declare namespace ns1='myservice url';
//ns1:AccountVerifyResponse/ns1:mobileNumberVerified/text()
XQuery匹配:
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Add").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
log.info "Value of attribute is " + attr1
log.info "Value of attribute is " + attr2
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def attr1 = holder.getNodeValue("//ns1:mobileNumberVerified/@*:nil")
def attr2 = holder.getNodeValue("//ns1:mobileNumberVerified/@region")
import com.eviware.soapui.support.XmlHolder
def response = testRunner.testCase.getTestStepByName("Sample").getPropertyValue("response")
def holder = new XmlHolder(response)
holder.declareNamespace('ns1',"myservice url")
def value = holder.getNodeValue('//ns1:mobileNumberVerified/text()')
log.info value
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"]="myservice url"
def node = holder.getNodeValue("//ns1:mobileNumberVerified/text()")
//assert node==null
//assert node!=null
declare namespace ns1='myservice url';
declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope';
for $x in //ns1:AccountVerifyResponse
return
<status>{$x/ns1:mobileNumberVerified/text()}</status>
声明名称空间ns1='myservice url';
声明名称空间soapenv=http://schemas.xmlsoap.org/soap/envelope';
对于//ns1中的$x:AccountVerifyResponse
返回
{$x/ns1:mobileNumberVerified/text()}
成功了,你是对的……我确实错过了名称空间。非常感谢所有的详细信息。我的声誉不到15,上面说我的投票已经被记录但没有显示。但我接受了答案:)