python比较2个xml内容的方法


Posted in Python onMay 11, 2015

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
Python中的Classes和Metaclasses详解
Apr 02 Python
Python实现对excel文件列表值进行统计的方法
Jul 25 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
深入理解Django的自定义过滤器
Oct 17 Python
对pandas replace函数的使用方法小结
May 18 Python
Python面向对象进阶学习
May 21 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
python config文件的读写操作示例
Sep 27 Python
python迭代器常见用法实例分析
Nov 22 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
python实现录音功能(可随时停止录音)
Oct 26 Python
Python 生成短8位唯一id实战教程
Jan 13 Python
Python二分法搜索算法实例分析
May 11 #Python
python处理图片之PIL模块简单使用方法
May 11 #Python
python自定义解析简单xml格式文件的方法
May 11 #Python
python引用DLL文件的方法
May 11 #Python
深入解析Python中的WSGI接口
May 11 #Python
详细解析Python中__init__()方法的高级应用
May 11 #Python
从Python的源码来解析Python下的freeblock
May 11 #Python
You might like
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
php 团购折扣计算公式
2011/11/24 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
JS location几个方法小姐
2008/07/09 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
手写简单的jQuery雪花飘落效果实例
2018/04/22 jQuery
Javascript实现时间倒计时功能
2018/11/17 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
详解python之heapq模块及排序操作
2019/04/04 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
python 动态绘制爱心的示例
2020/09/27 Python
python中spy++的使用超详细教程
2021/01/29 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
英国健身专家:WIT Fitness
2021/02/09 全球购物
Java语言程序设计测试题选择题部分
2014/04/03 面试题
Structs界面控制层技术
2013/10/11 面试题
视光学毕业生自荐书范文
2014/02/13 职场文书
致接力运动员广播稿
2014/02/17 职场文书
保险专业自荐信范文
2014/02/20 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python