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

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

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

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

test1.xml

<blocklist lastupdate="1459262434336" xmlns="http://www.mozilla.org/2006/addons-blocklist">
  <emItems>
    <emItem blockID="i454" id="sqlmoz@facebook.com">
      <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="sqlmoz@facebook.com">
      <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=(',', ':'))

1 ответ

Решение

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

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

Другие вопросы по тегам