繁体   English   中英

如何使用 groovy 脚本获取特定的 xml 节点值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM