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实现随机密码字典生成器示例
Apr 09 Python
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
python基于右递归解决八皇后问题的方法
May 25 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
django 外键model的互相读取方法
Dec 15 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
python实现键盘输入的实操方法
Jul 16 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 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下载远程文件类(支持断点续传)
2008/11/14 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Python函数参数类型*、**的区别
2015/04/11 Python
深入解析Python中的上下文管理器
2016/06/28 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
kali中python版本的切换方法
2019/07/11 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
python中wheel的用法整理
2020/06/15 Python
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
产品质量承诺范本
2014/03/31 职场文书
给公司的建议书范文
2014/05/13 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
求职意向书范本
2015/05/11 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android