Есть ли способ сравнить файлы XML (с одинаковым именем), сохраненные в двух разных папках, и найти разницу между ними? Я хотел бы сравнить несколько файлов XML, хранящихся в разных папках, для целей тестирования. Я рад изучить это на любом языке, таком как Java, скрипт Groovy, python и т. д.,
Пожалуйста, добавьте свои мысли. Очень ценю вашу помощь!




В Питоне:
filecmp: Сравнение файлов и каталогов:
import filecmp
cmp = filecmp.cmp('file_1.xml', 'file_2.xml')
# Files are equal
if cmp:
continue
else:
out_file.write('file_1.xml')
Чисто и по существу для python. +1
Для Java что-то вроде
public static void main(String[] args) throws IOException {
File file1 = new File("aaa.xml");
File file2 = new File("bbb.xml");
boolean areTwoFilesEqual = FileUtils.contentEquals(file1, file2);
System.out.println("Two files are equal?" + areTwoFilesEqual);
}
будет делать дело с Apache Commons IO API.
groovy с использованием xmlunit:
@Grab(group='xmlunit', module='xmlunit', version='1.6')
import org.custommonkey.xmlunit.XMLUnit
XMLUnit.setIgnoreWhitespace(true)
def r1 = new File('/11/1.xml').newReader("UTF-8")
def r2 = new File('/11/2.xml').newReader("UTF-8")
def diff = XMLUnit.compareXML(r1, r2)
assert diff.similar()
Проголосовал, потому что это первый ответ, который не считает XML-файлы «разными» только потому, что они отличаются двоичным кодом.
Вы можете сравнить два XML-файла с помощью визуального инструмента TreeOps https://github.com/treeops/treeops. Он преобразует и сравнивает данные дерева в XML/JSON/CSV. Пользователь может выбрать пути, которые будут игнорироваться при сравнении.
TreeOps определяет набор преобразований дерева данных для облегчения типичных манипуляций с данными:
Каково определение разницы? XML-мудрый или двоичный или текстовый?