从同一标签多次获取值

时间:2018-08-29 11:57:55

标签: soap groovy soapui

我使用SoapUI处理SOAP请求。我尝试在同一SOAP响应上多次匹配相同的正则表达式,它多次包含相同的标记<ns12:AmountID>,而我需要所有的值。我以这种方式在Groovy脚本中使用正则表达式:

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

我该如何区分输出值?

2 个答案:

答案 0 :(得分:1)

与使用正则表达式相比,XPath或Groovy的GPath几乎总是一种在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]

答案 1 :(得分:1)

您可以通过以下易于理解和处理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