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统计文件行数示例分享
Feb 21 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
Apr 09 Python
Django中反向生成models.py的实例讲解
May 30 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
Python3.5运算符操作实例详解
Apr 25 Python
python反转列表的三种方式解析
Nov 08 Python
python异常处理try except过程解析
Feb 03 Python
python简单实现9宫格图片实例
Sep 03 Python
python实现简单遗传算法
Sep 18 Python
python xlsxwriter模块的使用
Dec 24 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
输出控制类
2006/10/09 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
Javascript - HTML的request类
2006/07/15 Javascript
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
python为tornado添加recaptcha验证码功能
2014/02/26 Python
python Gabor滤波器讲解
2020/10/26 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
房地产销售经理岗位职责
2014/01/01 职场文书
党员党性分析材料
2014/02/17 职场文书
法律进机关实施方案
2014/03/12 职场文书
节能环保口号
2014/06/12 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
小学班主任自我评价
2015/03/11 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
MySQL读取JSON转换的方式
2022/03/18 MySQL