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中的线程同步方法
Jun 14 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
python3库numpy数组属性的查看方法
Apr 17 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
python读写配置文件操作示例
Jul 03 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Python 实现向word(docx)中输出
Feb 13 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
python中shell执行知识点
May 06 Python
python开发入门——列表生成式
Sep 03 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 引用文件技巧
2010/03/02 PHP
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
小议Javascript中的this指针
2010/03/18 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python实现基于POS算法的区块链
2018/08/07 Python
keras topN显示,自编写代码案例
2020/07/03 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
EJB实例的生命周期
2016/10/28 面试题
毕业自我鉴定范文
2013/11/06 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
财务工作者先进事迹材料
2014/01/17 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
共产党员承诺书
2014/03/25 职场文书
供货协议书
2014/04/22 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python