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创建进程fork用法
Jun 04 Python
Python实现控制台进度条功能
Jan 04 Python
详解Python中最难理解的点-装饰器
Apr 03 Python
python timestamp和datetime之间转换详解
Dec 11 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
python爬虫实现中英翻译词典
Jun 25 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
python基于tkinter制作下班倒计时工具
Apr 28 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
JavaScript创建命名空间的5种写法
2014/06/24 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
Python实现的多线程端口扫描工具分享
2015/01/21 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
基于python调用psutil模块过程解析
2019/12/20 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
python 弧度与角度互转实例
2020/04/15 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
《世界多美呀》教学反思
2014/03/02 职场文书
法人授权委托书范本
2014/09/17 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
创业计划书之熟食店
2019/10/16 职场文书
MySQL 如何分析查询性能
2021/05/12 MySQL
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript
 python中的元类metaclass详情
2022/05/30 Python