Итак, мне нужно написать «дублирующую проверку», чтобы сравнить два XML-файла и посмотреть, совпадают ли они (содержат одинаковые данные). Теперь, поскольку они принадлежат одному и тому же классу и генерируются из XSD, структура, скорее всего, порядок элементов внутри будет одинаковым.
Лучший способ подумать о проверке дубликатов - это установить два словаря (dictLeft, dictRight) и сохранить значение xpath # в качестве ключа и количество раз, когда оно происходит. Примерно так:
Слева:
{ 'my/path/to/name#greg': 1, 'my/path/to/name#john': 2, 'my/path/to/car#toyota': 1}
правый
{ 'my/path/to/name#greg': 1, 'my/path/to/name#bill': 1, 'my/path/to/car#toyota': 1}
Сравнение этих двух словарей даст мне достаточно точное указание на то, являются ли эти два XML одинаковыми или нет (есть странный шанс, что я могу получить ложные результаты, но это очень далеко).
У кого-нибудь есть идея получше? Может быть, функция в ElementTree, о которой я не знаю?
РЕДАКТИРОВАТЬ: Чтобы лучше объяснить:
<root><person><name>Bob</name><surname>marley</surname></root>
и
<root><person><surname>marley</surname><name>Bob</name></root>
будет считаться тем же. Я игнорирую атрибуты. Идея состоит в том, чтобы сделать код как можно более простым, не сильно снижая производительность.