Получить значения несколько раз из тех же тегов - PullRequest
0 голосов
/ 29 августа 2018

Я использую SoapUI для обработки запросов SOAP. Я пытаюсь сопоставить одно и то же регулярное выражение несколько раз в одном и том же ответе SOAP, он содержит один и тот же тег, <ns12:AmountID> несколько раз, и мне нужны все значения. Я использую регулярное выражение в Groovy сценарии таким образом:

String numberToGet = reger.getNthMatch(/<ns12:AmountID>(\d+)<\/ns12:AmountID>/, 0);

Как я могу отличить выходные значения?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Это можно сделать с помощью приведенного ниже кода, который прост для понимания и работы с XML.

Кроме того, я чувствую, что синтаксис легко запомнить по сравнению с XMLSlurper. Один из лучших способов получить значение из любого XML

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

// Cosidering your soap request name is **SampleRequest**
def respsone=groovyUtils.getXmlHolder("SampleRequest#Response")

def AmountId=respsone.getNodeValues("//*:AmountID")

// Printing as a list
log.info AmountId.toString()

// Printing as individual item from Array
for(def var in AmountId)
log.info var

Ниже вывод

enter image description here

0 голосов
/ 30 августа 2018

XPath или GPath Groovy - почти всегда лучший способ поиска вещей в документах XML, чем использование регулярных выражений. Например:

import groovy.util.XmlSlurper

def amountIDstring = '''
<root xmlns:ns12="http://www.w3.org/TR/html4/">
    <ns12:AmountID>1230</ns12:AmountID>
    <ns12:AmountID>460</ns12:AmountID>
    <ns12:AmountID>123</ns12:AmountID>
    <ns12:AmountID>670</ns12:AmountID>
    <ns12:AmountID>75</ns12:AmountID>
    <ns12:AmountID>123</ns12:AmountID>
</root>
'''

def amountIDtext = new XmlSlurper().parseText(amountIDstring)
def numberToGet  = amountIDtext.'**'.findAll{node -> node.name() == 'AmountID'}*.text()

numberToGet.each{ println "Amount ID = ${it}"}

Возвращает:

Amount ID = 1230
Amount ID = 460
Amount ID = 123
Amount ID = 670
Amount ID = 75
Amount ID = 123
Result: [1230, 460, 123, 670, 75, 123]
...