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简单实现方法
Jan 26 Python
python itchat实现微信自动回复的示例代码
Aug 14 Python
django 2.0更新的10条注意事项总结
Jan 05 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
解决python "No module named pip" 的问题
Oct 13 Python
对python制作自己的数据集实例讲解
Dec 12 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
Python验证码截取识别代码实例
May 16 Python
如何在Python对Excel进行读取
Jun 04 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
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
php自定文件保存session的方法
2014/12/10 PHP
php如何连接sql server
2015/10/16 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
Javascript面向对象编程
2012/03/18 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
python如何操作mysql
2020/08/17 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
yy司仪主持词
2014/03/22 职场文书
暑期培训班招生方案
2014/08/26 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
服务承诺书
2015/01/19 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
2016高考寄语集锦
2015/12/04 职场文书
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS