[英]How to get a particular xml node values using groovy script
这是我的 soap 回复。 我正在使用免费版的soapui。 有人请帮助我使用 groovy 从 **<tRiseMedia:OSDConfiguration token="60"> ** 节点获取值 60,61 作为数组
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<tRiseMedia:GetStreamOSDsResponse>
<tRiseMedia:StreamOsdList>
<tRiseMedia:StreamName>VideoEncoder_Encoder1</tRiseMedia:StreamName>
<tRiseMedia:OSDConfiguration token="60">
<tt:VideoSourceConfigurationToken>VideoSource_VisibleCamera</tt:VideoSourceConfigurationToken>
<tt:Type>Text</tt:Type>
<tt:Position>
<tt:Type>Custom</tt:Type>
<tt:Pos x="15" y="50"/>
</tt:Position>
<tt:TextString>
<tt:Type>Sector</tt:Type>
</tt:TextString>
</tRiseMedia:OSDConfiguration>
</tRiseMedia:StreamOsdList>
<tRiseMedia:StreamOsdList>
<tRiseMedia:StreamName>VideoEncoder_Encoder1</tRiseMedia:StreamName>
<tRiseMedia:OSDConfiguration token="61">
<tt:VideoSourceConfigurationToken>VideoSource_VisibleCamera</tt:VideoSourceConfigurationToken>
<tt:Type>Text</tt:Type>
<tt:Position>
<tt:Type>Custom</tt:Type>
<tt:Pos x="35" y="35"/>
</tt:Position>
<tt:TextString>
<tt:Type>Sector</tt:Type>
</tt:TextString>
</tRiseMedia:OSDConfiguration>
</tRiseMedia:StreamOsdList>
</tRiseMedia:GetStreamOSDsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这是我的 groovy 脚本片段
import com.eviware.soapui.support.XmlHolder
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext
def TestCase = context.testCase
PropertiesTestStep = TestCase.getTestStepByName("Properties")
def response = testRunner.testCase.getTestStepByName('GetStreamOSDs').getPropertyValue("response")
def samplexmlreq=new XmlHolder(response)
def tokenFromResponse = samplexmlreq.getNodeValue("/*:Envelope/*:Body/tRiseMedia:GetStreamOSDsResponse/tRiseMedia:StreamOsdList/tRiseMedia:OSDConfiguration/@token")
def envelope = new XmlParser(false, false).parse(samplexmlreq)
def tokens = envelope.'**'.findAll { node -> node.name() == 'tRiseMedia:OSDConfiguration' }*.@token
log.info token
如果你只想要一个令牌列表,你可以这样做:
def xmlText = '''<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<tRiseMedia:GetStreamOSDsResponse>
<tRiseMedia:StreamOsdList>
<tRiseMedia:StreamName>VideoEncoder_Encoder1</tRiseMedia:StreamName>
<tRiseMedia:OSDConfiguration token="60">
<tt:VideoSourceConfigurationToken>VideoSource_VisibleCamera</tt:VideoSourceConfigurationToken>
<tt:Type>Text</tt:Type>
<tt:Position>
<tt:Type>Custom</tt:Type>
<tt:Pos x="15" y="50"/>
</tt:Position>
<tt:TextString>
<tt:Type>Sector</tt:Type>
</tt:TextString>
</tRiseMedia:OSDConfiguration>
</tRiseMedia:StreamOsdList>
<tRiseMedia:StreamOsdList>
<tRiseMedia:StreamName>VideoEncoder_Encoder1</tRiseMedia:StreamName>
<tRiseMedia:OSDConfiguration token="61">
<tt:VideoSourceConfigurationToken>VideoSource_VisibleCamera</tt:VideoSourceConfigurationToken>
<tt:Type>Text</tt:Type>
<tt:Position>
<tt:Type>Custom</tt:Type>
<tt:Pos x="35" y="35"/>
</tt:Position>
<tt:TextString>
<tt:Type>Sector</tt:Type>
</tt:TextString>
</tRiseMedia:OSDConfiguration>
</tRiseMedia:StreamOsdList>
</tRiseMedia:GetStreamOSDsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
'''
def envelope = new XmlParser(false, false).parseText(xmlText)
def tokens = envelope.'**'.findAll { node -> node.name() == 'tRiseMedia:OSDConfiguration' }*.@token
assert tokens == ['60', '61']
您可以像这样得到响应 XML :
import com.eviware.soapui.support.XmlHolder
def xmlText = new XmlHolder(context.response)
我得到了如下解决方案
import com.eviware.soapui.support.XmlHolder
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext
def TestCase = context.testCase
PropertiesTestStep = TestCase.getTestStepByName("Properties")
def response = testRunner.testCase.getTestStepByName('GetStreamOSDs').getPropertyValue("response")
def envelope = new XmlParser().parseText(response)
//Getting all the token values from the response
def tokens = envelope.'**'.findAll { node -> node.name() == 'tRiseMedia:OSDConfiguration' }*.@token
log.info tokens
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.