как получить значение тега в мыло с Groovy - PullRequest
0 голосов
/ 15 мая 2018
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <ns2:getAttachmentsByCaseIdResponse xmlns:ns2="http://soap.webservice.mod.sub.domain.com/">
         <return>
            <documentClass> A </documentClass>
            <documentId>{C6499CA4-18A8-C56B-84F5-6362E3F00000}</documentId>
            <filename>Image.png</filename>
            <props>
               <entry>
                  <key>CODE_KEY</key>
                  <value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">29210242101077</value>
               </entry>
            </props>
         </return>
         <return>
            <documentClass> Y </documentClass>
            <documentId>{BC359D64-CC71-CC2B-877C-6362E4D00000}</documentId>
            <filename>fileX.pdf</filename>
            <props/>
         </return>
         <return>
            <documentClass>  X </documentClass>
            <documentId>{0000000-000-000-0000-0000000000}</documentId>
            <filename>filename.pdf</filename>
            <props/>
         </return>
      </ns2:getAttachmentsByCaseIdResponse>
   </soapenv:Body>
</soapenv:Envelope>

У меня нет опыта работы с groovy, и мне просто нужен скрипт, который возвращает значение тега "documentClass", если он содержит X, а затем получает следующий контент тега "documentId"

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Предполагается, что ваш пример xml является ответом на запрос TestRequest

def groovyUtils=new com.eviware.soapui.support.GroovyUtils(context)

 def xmlHolder=groovyUtils.getXmlHolder("TestRequest#Response")

def xml=  xmlHolder.getXml()

def parser=new XmlSlurper().parseText("xml")
def value=parser.'**'.findAll{it.documentClass.text()=="X"}.collect{it.documentId.text()}

log.info value.toString()

Вывод вышеуказанной программы

Wed May 16 10:51:42 IST 2018:INFO:[{0000000-000-000-0000-0000000000}]

Логическое объяснение

Сначала преобразовал ответ в xml в переменную с именем «xml», затем с помощью XmlSlurper получил идентификатор на основе documentClass. «это» - переменная groorvy, которая проверяет все входные данные.

если у вас есть входные данные, такие как ниже, то есть пробелы, которые вам, возможно, придется обрезать или, альтернативно, давать, как показано ниже

  it.documentClass.text()=="  X  "

 <documentClass>  X </documentClass>
0 голосов
/ 16 мая 2018

Вы можете использовать XMLSlurper для разбора содержимого XML. Более подробная информация доступна через API (http://docs.groovy -lang.org / latest / html / api / groovy / util / XmlSlurper.html ), но быстрый и грязный пример, который получает то, что вам нужно, выглядит примерно так: :

​import groovy.util.XmlSlurper

def text = "" // your XML here
def slurp = new XmlSlurper().parseText(text)
slurp.Body.getAttachmentsByCaseIdResponse.return?.each {
    println "Class: ${it.documentClass}, ID: ${it.documentId}"
}

1007 *

...