本文实例讲述了python比较2个xml内容的方法。分享给大家供大家参考。具体分析如下:
from xml.etree import ElementTree OK=True main_pid = 10000 loop_depth = 0 def compare_xml(left, right, key_info='.'): global loop_depth loop_depth += 1 if loop_depth == 1: print if left.tag != right.tag: print_diff(main_pid, key_info, 'difftag', left.tag, right.tag) return if left.text != right.text: print_diff(main_pid, key_info, 'difftext', left.text, right.text) return leftitems = dict(left.items()) rightitems = dict(right.items()) for k,v in leftitems.items(): if k not in rightitems: s = '%s/%s' % (key_info, left.tag) print_diff(main_pid, s, 'lostattr', k, "") for k,v in rightitems.items(): if k not in leftitems: s = '%s/%s' % (key_info, right.tag) print_diff(main_pid, s, 'extraattr', "", k) leftnodes = left.getchildren() rightnodes = right.getchildren() leftlen = len(leftnodes) rightlen = len(rightnodes) if leftlen != rightlen: s = '%s/%s' % (key_info, right.tag) print_diff(main_pid, s, 'difflen', leftlen, rightlen) return l = leftlen<rightlen and leftlen or rightlen d = {} for i in xrange(l): node=leftnodes[i] if node.tag not in d: d[node.tag] = 1 tag = node.tag else: tag = node.tag + str(d[node.tag]) d[node.tag] += 1 s = '%s/%s' % (key_info, tag) compare_xml(leftnodes[i], rightnodes[i], s) def print_diff(main_pid, key_info, msg, base_type, test_type): global OK info = u'[ %-5s ] %s -> %-40s [ %s != %s ]'%(msg.upper(), main_pid, key_info.strip('./'), base_type, test_type) print info.encode('gbk') OK = False
调用:
if __name__ == '__main__': s1 = '''''<?xml version="1.0" encoding="UTF-8"?> \ <employees> \ <employee id = '1'> \ <name>linux</name>\ <age>30</age>\ </employee>\ <employee id = '2'> \ <name>windows</name>\ <age>20</age>\ </employee>\ </employees>''' s2 = '''''<?xml version="1.0" encoding="UTF-8"?> \ <employees> \ <employee id = '3'> \ <name>windows</name>\ <age>20</age>\ </employee>\ <employee id = '4'> \ <name>linux</name>\ <age>30</age>\ </employee>\ </employees>''' lroot = ElementTree.fromstring(s1) rroot = ElementTree.fromstring(s2) compare_xml(lroot, rroot)
希望本文所述对大家的Python程序设计有所帮助。
问题内容: 我有2个excel文件,我想比较内容并突出显示差异。例如: 第一个档案… 有没有第三方图书馆可以做到这一点?或最好的方法是什么? 问题答案: 就像DaDaDom所说的那样,Apache POI是您想要的。您可以从此页面下载它。请注意,POI项目不是完全独立的,您可能需要下载一些额外的库。请遵循Apache POI网站上的说明。这是您的用法: 如果这是一个新文件,则可能需要先创建图纸才能
问题内容: 我正在尝试编写一个应用程序的自动化测试,该测试基本上将自定义消息格式转换为XML消息并将其发送到另一端。我有一组不错的输入/输出消息对,所以我要做的就是将输入消息发送进去,并听XML消息传到另一端。 当需要将实际输出与预期输出进行比较时,我遇到了一些问题。我的第一个想法只是对预期消息和实际消息进行字符串比较。这不能很好地工作,因为我们拥有的示例数据并不总是保持一致的格式,并且常常为XM
问题内容: 我有2个字符串对象的arraylists。 我有一些逻辑需要处理源列表,最终会得到目标列表。目标列表将有一些其他元素添加到源列表或从源列表中删除。 我的预期输出是string的2 ArrayList,其中第一个列表应具有从源中删除的所有字符串,第二个列表应具有所有新添加到源中的字符串。 有没有更简单的方法来实现这一目标? 问题答案: 将列表转换为 并使用 输出: [编辑] 其他方式(更
问题内容: 我有两个文件,如下所示: 和 我需要比较所有单元格,以及从该单元格中比较一个单元格 。 如何添加的比较电池和? 问题答案: 以下方法应该可以帮助您入门: 这将显示两个文件之间不同的所有单元格。对于给定的两个文件,将显示: 如果您更喜欢单元格名称,请使用: 给你:
问题内容: 是否有任何方法可以接收2个JSON对象并将其进行比较以查看是否有任何数据已更改? 编辑 在审查评论之后,需要进行一些澄清。 JSON对象定义为 “一组无序的名称/值对。一个对象以{(左括号)开始,以}(右括号)结束。每个名称后面都带有:(冒号),名称/值对之间以,(逗号)分隔。 ”。- json.org 我的目标是能够简单地比较2个JSON对象文字。 我不是javascript专家,所