Groovy脚本从2个文件夹中一次读取多个xml文件,并应用xmlunit比较方法

Groovy脚本从2个文件夹中一次读取多个xml文件,并应用xmlunit比较方法,groovy,soapui,xmlunit,Groovy,Soapui,Xmlunit,我将一系列xml文件放在两个单独的文件夹中,如下所示。我的目标是从两个文件夹中一次读取一个文件,并应用xmlunit comaprison方法 Folder1:actual1.xml actual2.xml actual3.xml Folder2:compare1.xml compare2.xml compare3.xml 第1部分:我使用下面的脚本一次从两个文件夹中读取每个文件。如果有更简单的方法,我欢迎大家提出建议 log.info "**********Read files from Fo

我将一系列xml文件放在两个单独的文件夹中,如下所示。我的目标是从两个文件夹中一次读取一个文件,并应用xmlunit comaprison方法

Folder1:actual1.xml actual2.xml actual3.xml

Folder2:compare1.xml compare2.xml compare3.xml

第1部分:我使用下面的脚本一次从两个文件夹中读取每个文件。如果有更简单的方法,我欢迎大家提出建议

log.info "**********Read files from Folder1************"
def xml_file1 = []  
new File("D:\\GroovyTest\\Folder1").eachFile{ f ->  
f (f.isFile()&& f.name.contains('.xml'))  
{  
def filename = f.name[0..-1]  
xml_file1.add(filename)  
log.info filename  
}  
}
if (xml_file1.size() <1)  
{  
testRunner.fail("No request files found")  
}
第2部分:为数组xml_file1和xml_file2中包含的xml文件的每个组合执行比较的脚本

实际上,我在这一部分遇到了困难,因为如果每个xml文件都保存在一个字符串中,那么下面的脚本适用于单个文件,但我必须将数组作为参数传递,因为我有一系列要比较的xml文件。我得到一个运行时错误-groovy.lang.GroovyRuntimeException:在第60行找不到与以下内容匹配的构造函数:java.io.FileInputStream(java.util.ArrayList)错误

InputStream xml_stream1 = new FileInputStream(xml_file1)  
String xml1 = getStringFromInputStream(xml_stream1)  
InputStream xml_stream2 = new FileInputStream(xml_file2)  
String xml2 = getStringFromInputStream(xml_stream2)  
def factory = TransformerFactory.newInstance()  
def transformer = factory.newTransformer(new StreamSource(new StringReader(xslt)))  
StreamResult result_xml1 = new StreamResult(new StringWriter());  
transformer.transform(new StreamSource(new StringReader(xml1)), result_xml1)  
xml1 = result_xml1.getWriter().toString()  
StreamResult result_xml2 = new   StreamResult(newStringWriter());  
transformer.transform(new StreamSource(new StringReader(xml2)), result_xml2)  
xml2 = result_xml2.getWriter().toString()  
XMLUnit.setIgnoreComments(true)  
DifferenceListener differenceListener = newIgnoreTextAndAttributeValuesDifferenceListener();  
DetailedDiff myDiff = new DetailedDiff(new Diff(xml1, xml2));  
myDiff.overrideDifferenceListener(differenceListener);  
myDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());  
log.info "similar ? " + myDiff.similar()  
log.info "identical ? " + myDiff.identical()  
List allDifferences = myDiff.getAllDifferences();  
for (Object object : allDifferences) {  
Difference difference = (Difference)object;  
log.info(difference);  
}
有人能帮我在比较过程中忽略空标记的方法吗?
谢谢

如果您只是比较磁盘上的文件,我不明白您为什么要通过SoapUI进行比较。我遗漏了什么?@SiKing:对Web服务的请求通过SOAPUI触发,响应被捕获并以xml格式放置在本地驱动器中。有人能看看这个plz吗。谢谢您希望迭代您的
xml\u文件1
数组,从
xml\u文件2
中选择匹配的文件,然后对单个文件执行比较。您可能不希望使用数组,而希望使用映射将“匹配”文件保持在一起。
InputStream xml_stream1 = new FileInputStream(xml_file1)  
String xml1 = getStringFromInputStream(xml_stream1)  
InputStream xml_stream2 = new FileInputStream(xml_file2)  
String xml2 = getStringFromInputStream(xml_stream2)  
def factory = TransformerFactory.newInstance()  
def transformer = factory.newTransformer(new StreamSource(new StringReader(xslt)))  
StreamResult result_xml1 = new StreamResult(new StringWriter());  
transformer.transform(new StreamSource(new StringReader(xml1)), result_xml1)  
xml1 = result_xml1.getWriter().toString()  
StreamResult result_xml2 = new   StreamResult(newStringWriter());  
transformer.transform(new StreamSource(new StringReader(xml2)), result_xml2)  
xml2 = result_xml2.getWriter().toString()  
XMLUnit.setIgnoreComments(true)  
DifferenceListener differenceListener = newIgnoreTextAndAttributeValuesDifferenceListener();  
DetailedDiff myDiff = new DetailedDiff(new Diff(xml1, xml2));  
myDiff.overrideDifferenceListener(differenceListener);  
myDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());  
log.info "similar ? " + myDiff.similar()  
log.info "identical ? " + myDiff.identical()  
List allDifferences = myDiff.getAllDifferences();  
for (Object object : allDifferences) {  
Difference difference = (Difference)object;  
log.info(difference);  
}