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+mysql实现简单的web程序
Sep 11 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
Python批量更改文件名的实现方法
Oct 29 Python
python基于ID3思想的决策树
Jan 03 Python
redis之django-redis的简单缓存使用
Jun 07 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
django的csrf实现过程详解
Jul 26 Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
Django模板标签中url使用详解(url跳转到指定页面)
Mar 19 Python
自学python用什么系统好
Jun 23 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
新闻分类录入、显示系统
2006/10/09 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python使用sorted排序的方法小结
2017/07/28 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
中间件的定义
2016/08/09 面试题
机电专业毕业生求职信
2013/10/27 职场文书
会计专业自我鉴定范文
2013/12/29 职场文书
销售行政专员职责
2014/01/03 职场文书
食品安全工作实施方案
2014/03/26 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android