Skip to main content
 首页 » 编程设计

Python ElementTree 重复检查器

2025年05月04日10落叶无声

所以我必须编写一个“重复检查器”来比较两个 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。如果有人有更好的算法,我会洗耳恭听:)