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 getopt模块处理命令行选项实例
May 13 Python
举例详解Python中的split()函数的使用方法
Apr 07 Python
Django中使用group_by的方法
May 26 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
运用PyTorch动手搭建一个共享单车预测器
Aug 06 Python
python写一个随机点名软件的实例
Nov 28 Python
Python测试线程应用程序过程解析
Dec 31 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
python中random模块详解
Mar 01 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无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
js 自定义的联动下拉框
2010/02/07 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
详谈javascript异步编程
2016/02/21 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
jQuery实现网页拼图游戏
2020/04/22 jQuery
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
python3+selenium自动化测试框架详解
2019/03/17 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python定时器线程池原理详解
2020/02/26 Python
Python调用C语言程序方法解析
2020/07/07 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
城市规划毕业生求职信
2013/10/10 职场文书
学生处主任岗位职责
2013/12/01 职场文书
应届大专生求职信
2014/06/26 职场文书
欢送会主持词
2015/07/01 职场文书
高中数学教学反思范文
2016/02/18 职场文书