我使用SoapUI处理SOAP请求。我尝试在同一SOAP响应上多次匹配相同的正则表达式,它多次包含相同的标记<ns12:AmountID>
,而我需要所有的值。我以这种方式在Groovy
脚本中使用正则表达式:
String numberToGet = reger.getNthMatch(/<ns12:AmountID>(\d+)<\/ns12:AmountID>/, 0);
我该如何区分输出值?
答案 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
下面是输出