从Groovy中的文件中读取并临时保存XML内容

时间:2015-05-11 19:11:33

标签: xml rest groovy xml-parsing soapui

我正在尝试在Groovy的帮助下解析一个有多个联系人的xml文件。我想要做的是从xml中获取此文件中的每个联系人,并将其作为REST请求的一部分逐个发送。我尝试在XmlParser和XmlSlurper的帮助下编写一个groovy脚本,但是这样做并不是很成功。我对Groovy很新。

以下是文件的内容:

<contacts>
    <contact>
        <firstName>Dummy</firstName>
        <lastName>Contact1</lastName>
        <gender>M</gender>
    </contact>

    <contact>
        <firstName>Dummy</firstName>
        <lastName>Contact2</lastName>
        <gender>F</gender>
    </contact>
</contacts>

以下是我尝试使用XmlSlurper的代码:

import groovy.xml.*

//get the file path
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def projectPath = groovyUtils.projectPath
def f = new File(projectPath + '\\contacts - xml.txt')

//check if file exists
if(!f.exists())
{
    throw Exception("The XML File does not exist")  
}

//parse file
def xml = new XmlSlurper().parse(f)
log.info xml

以下是我获得上述代码的输出:

DummyContact1MDummyContact2F

我也可以通过以下方式访问invidual节点:

log.info xml.contact[0].gender

当我使用XmlParser而不是XmlSlurper时,我得到一个似乎更无法使用的响应:

contacts[attributes={}; value=[contact[attributes={}; value=[firstName[attributes={}; value=[Dummy]], lastName[attributes={}; value=[Contact1]], gender[attributes={}; value=[M]]]], contact[attributes={}; value=[firstName[attributes={}; value=[Dummy]], lastName[attributes={}; value=[Contact2]], gender[attributes={}; value=[F]]]]]]

有没有办法可以将文件中的内容读取为xml并将其存储在包含xml的变量中,以便我可以将其简单地传递给REST Post Request?无法知道文件中的联系人记录数量或每个联系人的节点数量。

1 个答案:

答案 0 :(得分:1)

您与XmlSlurper()走在正确的轨道上。继续你的脚本:

def contacts = xml.'**'.findAll { it.name().equals('contact') }
contacts.each {
    // do something with the contact
    log.info it.firstName.text()
    log.info it.lastName.text()
    log.info it.gender.text()
}

阅读documentation

您可以将每个联系人重写为相应的请求 - 您没有指定您想要的内容。将其存储在变量中:

testCase.setPropertyValue('myContact', myContact)

然后在您的请求中,您可以使用${testCase#myContact}打开它。

即使SoapUI的免费版本也有built-in loops,因此您可以根据需要多次循环所有这些:直到${testCase#myContact}变空。