Это одна из тех проблем, которые кажется, что это будет легко начать w с, но чем больше вы копаете, тем больше глубины вы обнаружите в проблемном пространстве.
Существует множество ранее существовавших инструментов, в которых будет выполняться xml diff - как в графическом интерфейсе (в том же стиле, что и в текстовых инструментах), и в командной строке/компонентах (которые больше того, d после). XMLDiff - один из таких случаев, как уже упоминалось.
Проблемы возникают, когда вы задаете такие вопросы, как - что я хочу, чтобы он выводил? Вам просто нужен код возврата, который говорит, если они одинаковые или разные (для единичных целей тестирования это может быть действительно достаточно) - или вы хотите, чтобы отчет показывал вам, что такое различия? (также может быть полезно для модульных тестов, если вы хотите найти, в чем проблема)? Если последний, как вам нужна эта информация? Вы хотите отредактировать расстояние? Вы хотите, чтобы он интерпретировал числовые значения и рассказал вам разницу между ними?
Как насчет упорядочения узлов? Если дочерние узлы находятся в определенном порядке - или если они являются одними и теми же узлами, но в другом порядке, это нормально?
Возможно, вам также захочется указать, что сравнивать. Должны ли пространства имен совпадать? Является ли пробел значительным в любом месте? Существуют ли определенные узлы, которые вы всегда хотите игнорировать (например, атрибут «время»), или вы хотите, чтобы более тонкий контроль над тем, какие узлы сравниваются, а какие нет?
Для численных сравнений вы хотите разрешить допуски? Для текстовых сравнений (текстовых узлов) пробел в пределах текст значителен? Как насчет капитализации?
И вы можете продолжать и продолжать (как я это сделал в анализе только для такого проекта, где я недавно работал).
Каждый инструмент решает эти проблемы в разной степени и по-разному.
Возможно, вы решите просто сделать это как можно проще и перейти к чему-то, что делает прямое, узлоузел, сравнение без интерпретации, и в конце расскажите, являются ли они одинаковыми или разными. Я считаю, xmldiff даст вам это (и немного больше).
Также стоит подумать, что если вы хотите обрабатывать такие случаи, как разные порядки узлов или игнорировать определенные ветви, вы можете применить преобразование xslt к вашему тестовому документу перед сравнением, чтобы нормализовать его в соответствии с вашими правилами.
Тот же вопрос [здесь] (http://stackoverflow.com/questions/167946/how-would-you-compare-two-xml-documents). – 2008-11-09 12:01:18