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中的super用法详解
May 28 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
Django组件content-type使用方法详解
Jul 19 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
tensorflow 查看梯度方式
Feb 04 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
django admin后管定制-显示字段的实例
Mar 11 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 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中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
bootstrap table实例详解
2017/01/06 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
修改npm全局安装模式的路径方法
2018/05/15 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
Python入门篇之列表和元组
2014/10/17 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
python dataframe NaN处理方式
2019/12/26 Python
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
《大江保卫战》教学反思
2014/04/11 职场文书
班干部演讲稿
2014/04/24 职场文书
维稳承诺书
2015/01/20 职场文书
员工辞职信范文
2015/03/02 职场文书
大学生自荐信范文
2015/03/05 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
python - asyncio异步编程
2021/04/06 Python