Xml 如何在Groovy for SoapUI中使用分隔符将所有SOAP响应值写入CSV文件

Xml 如何在Groovy for SoapUI中使用分隔符将所有SOAP响应值写入CSV文件,xml,csv,groovy,soapui,Xml,Csv,Groovy,Soapui,我是Groovy新手,正在从事SOAPUI工作。目前我正在Groovy模块上工作,我需要将带有分隔符的所有标记值写入.csv文件。我从另一篇文章中得到的解决方案是针对xpath的 但我正在努力实现以下目标: 要存储在csv文件中的所有重复数组的所有值 单行中的每个数组都带有分隔符 预期输出: code;Name;Category;Manufacturer;Price;Stock // as header 1234;product name;some category;manufacturer;1

我是Groovy新手,正在从事SOAPUI工作。目前我正在Groovy模块上工作,我需要将带有分隔符的所有标记值写入
.csv
文件。我从另一篇文章中得到的解决方案是针对
xpath

但我正在努力实现以下目标:

  • 要存储在csv文件中的所有重复数组的所有值
  • 单行中的每个数组都带有分隔符
  • 预期输出:

    code;Name;Category;Manufacturer;Price;Stock // as header
    1234;product name;some category;manufacturer;100;1
    1235;product name2;some category2;manufacturer2;1002;2
    
    XML示例:

    <ns2:personalarray1Response>
        <ns2:personarray1>
            <Code>1234</Code>
            <Name>product name</Name>
            <Category>some category</Category>
            <Manufacturer>manufacturer</Manufacturer>
            <Price>100</Price>
            <Stock>1</Stock>
        </ns2:personarray1>
        <ns2:personarray1>
            <Code>1235</Code>
            <Name>product name2</Name>
            <Category>some category2</Category>
            <Manufacturer>manufacturer2</Manufacturer>
            <Price>1002</Price>
            <Stock>2</Stock>
        </ns2:personarray1>
        <ns2:personarray1>
            <Code>1234</Code>
            <Name>product name</Name>
            <Category>some category</Category>
            <Manufacturer>manufacturer</Manufacturer>
            <Price>100</Price>
            <Stock>1</Stock>
        </ns2:personalarray1>
    </ns2:personalarray1Response>
    

    下面是同一Soap请求步骤的
    脚本断言
    ,需要不需要来使用额外的Groovy脚本步骤

    脚本

     //Change file name as needed
    def fileName = '/file/path/to.csv'
    def delimiter = ',' 
    
    assert context.response, 'Response is empty or null'
    
    def xml = new XmlSlurper().parseText(context.response)
    
    def personalInfos = xml.'**'.findAll { it.name() == 'personarray1' }
    
    
    //Create the list of data (person array) 
    def list = personalInfos.collect {info -> info.children()*.name().collectEntries{[(it): info."$it"] } }
    
    
    def sb = new StringBuffer(list[0].keySet().join(delimiter))
    sb.append('\n')
    
    list.collect { sb.append(it.values().join(delimiter)).append('\n')}
    log.info "Data going to be written into file: \n ${sb.toString()}"
    
    new File(fileName).write(sb.toString())
    

    谢谢Rao的代码。但是当我在项目路径的运行时创建一个.csv文件时,我希望它出现在groovy模块中。我尝试了上面的代码,在获取错误为“wed Nov22 18:30.07 GMT+05:30 2017:error:a erroro Occursed[找不到匹配的构造函数:java:io:file(java.io.file)],请参阅错误日志了解详细信息”的SOAP Ui日志中,获取并显示了值。但同样的情况是无法写入文件。此外,已创建我的响应文件。@SD31,您可能尝试了错误的内容,或者没有按照解决方案中提供的内容进行尝试。@SD31,如果查看您在注释中发布的错误,您是在向文件传递文件对象。如果您已经有file对象,那么只需
    file.write(sb.toString())
    。错误:发生错误[找不到匹配的构造函数:java:io:file(java.io.file)]groovy.lang.GroovyRuntimeException:在groovy.lang.MetaclassImpl.invokeConstructor中找不到匹配的构造函数:java:io:file(java.io.file)位于org.codehaus.groovy.runtime.callsite.MetaclassConstructorSite.callConstructor(MetaclassConstructorSite.java:46)org.codehaus.groovy.runtime.callsite.callsite.MetaclassConstructorSite.callConstructor(MetaclassConstructorSite.java:46)的groovy.lang.MetaclassImpl.invokeConstructor(MetaclassImpl.java.1404)上