因此,我必须编写一个“重复检查器”来比较两个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>


将被视为相同。我忽略了属性。这样做的想法是使代码尽可能简单,同时又不至于影响性能。

最佳答案

好的,所以我必须做一个决定,然后这样做:

foreach path in xpathlist
  find entries for path for both xml1 and xml2
  foreach entry in xmlentries1
    dict1[path#entry.value]++
  foreach entry in xmlentries2
    dict2[path#entry.value]++

  if dict1 and dict2 are not equal
    return false
return true


我希望这是有道理的。这使我可以测试特定/所有xpath。如果有人有更好的算法,我会很:)

关于python - Python ElementTree重复检查器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5300649/

10-09 12:40