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正则表达式re模块详解
Jun 25 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
python logging添加filter教程
Dec 24 Python
python小项目之五子棋游戏
Dec 26 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
python3中for循环踩过的坑记录
Dec 14 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
Python正则表达式使用经典实例
2016/06/21 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
Python发送邮件实现基础解析
2020/08/14 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
《白鹅》教学反思
2014/04/13 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang