Нормализовать в канонической форме два файла XML в Python

У меня есть два файла XML, и мне нужно убедиться, что они содержат одинаковую точную информацию.

Независимо от порядка тегов или атрибутов.

Например, эти два файла XML должны быть равны:

test1.xml

<blocklist lastupdate="1459262434336" xmlns="http://www.mozilla.org/2006/addons-blocklist">
  <emItems>
    <emItem blockID="i454" id="[email protected]">
      <versionRange minVersion="0" maxVersion="*" severity="3">
        <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
          <versionRange maxVersion="3.6.*" minVersion="3.6"/>
        </targetApplication>
      </versionRange>
      <versionRange maxVersion="*" minVersion="0"/>
      <prefs>
        <pref>test.blocklist</pref>
      </prefs>
    </emItem>
  </emItems>
</blocklist>

test2.xml

<blocklist lastupdate="1459262434336" xmlns="http://www.mozilla.org/2006/addons-blocklist">
  <emItems>
    <emItem blockID="i454" id="[email protected]">
      <prefs>
        <pref>test.blocklist</pref>
      </prefs>
      <versionRange minVersion="0" maxVersion="*" severity="3">
        <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
          <versionRange maxVersion="3.6.*" minVersion="3.6"/>
        </targetApplication>
      </versionRange>
      <versionRange minVersion="0" maxVersion="*"/>
    </emItem>
  </emItems>
</blocklist>

Я попытался найти некоторые решения, такие как:

Я также собираюсь попробовать это решение

Но ты хоть представляешь, какие у меня тут варианты? Разве нормализация и канонизация XML не должны справиться с этим за меня?

что я здесь делаю не так?

Если бы я делал это в JSON, я бы использовал: json.dumps(data, sort_keys=True, separators=(',', ':'))


person Natim    schedule 04.04.2016    source источник
comment
Как насчет pastebin.com/HVJ0mwK7?   -  person Padraic Cunningham    schedule 04.04.2016
comment
Как он проверяет, что атрибуты равны?   -  person Natim    schedule 04.04.2016
comment
Извините, неправильно прочитал. Легко модифицировать, вытягивать теги, значения и сортировать   -  person Padraic Cunningham    schedule 04.04.2016
comment
На самом деле вы можете сделать это без сортировки и ленивой оценки второго файла, я добавлю код, когда вернусь к своему ноутбуку.   -  person Padraic Cunningham    schedule 04.04.2016
comment
Если вас действительно не волнует, где появляются теги, вы можете сделать что-то вроде pastebin.com/TH7MtHYb.   -  person Padraic Cunningham    schedule 04.04.2016


Ответы (1)


Для тех, кто интересуется этой темой, я создал скрипт xml-verifier, который делает это, преобразовывая xml в файл JSON, а затем экспортируя оба файла как Canonical JSON и выполняя их сравнение.

https://github.com/mozilla-services/amo2kinto/blob/1.7.2//amo2kinto/verifier.py#L80-L108

person Natim    schedule 22.12.2016
comment
Ссылка мертвая, к сожалению - person aurya; 12.02.2018
comment
Хороший улов, исправил. - person Natim; 13.02.2018