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使用xauth方式登录饭否网然后发消息
Apr 11 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
新手常见6种的python报错及解决方法
Mar 09 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
Jun 14 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
python实现飞船大战
Apr 24 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
python使用pycharm安装pyqt5以及相关配置
Apr 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
简单的过滤字符串中的HTML标记
2006/12/25 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
php之readdir函数用法实例
2014/11/13 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
python删除特定文件的方法
2015/07/30 Python
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
户外拓展活动方案
2014/02/11 职场文书
校运会班级霸气口号
2015/12/24 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL