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中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
简单易懂的python环境安装教程
Jul 13 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
python递归法解决棋盘分割问题
Jul 17 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
Python类super()及私有属性原理解析
Jun 15 Python
详解pytorch创建tensor函数
Mar 22 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调用C代码的实现方法
2014/03/11 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
python numpy元素的区间查找方法
2018/11/14 Python
Python自定义一个异常类的方法
2019/06/27 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
比较一下entity bean和session bean
2013/12/27 面试题
民族团结好少年事迹材料
2014/08/19 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
精神病医院见习报告
2014/11/03 职场文书
租车协议书范本2014
2014/11/17 职场文书
节水倡议书
2015/01/19 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
导游词书写之黄山
2019/08/06 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang