所以我必须编写一个“重复检查器”来比较两个 XML,看看它们是否相同(包含相同的数据)。现在因为它们来自同一个类并且是从 XSD 生成的,所以结构内部元素的顺序很可能是相同的。
我能想到的进行重复检查的最佳方法是设置两个字典(dictLeft、dictRight)并将 xpath#value 保存为键和它出现的次数。像这样的东西:
剩下:
{ '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>
将被视为相同。我忽略了属性。这个想法是让代码尽可能简单,同时又不会过多地影响性能。