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中用altzone()方法处理时区的教程
May 22 Python
python如何实现int函数的方法示例
Feb 19 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
python文件处理fileinput使用方法详解
Jan 02 Python
Python的赋值、深拷贝与浅拷贝的区别详解
Feb 12 Python
python实现随机加减法生成器
Feb 24 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
Python检测端口IP字符串是否合法
Jun 05 Python
解决Python安装cryptography报错问题
Sep 03 Python
python面向对象版学生信息管理系统
Jun 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
PHP实现文件安全下载
2006/10/09 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
php防止用户重复提交表单
2015/11/02 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
java直接调用python脚本的例子
2014/02/16 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
详解flask入门模板引擎
2018/07/18 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
python with语句的原理与用法详解
2020/03/30 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
2014年廉洁自律承诺书
2014/05/26 职场文书
社区安全温馨提示语
2015/07/14 职场文书
《检阅》教学反思
2016/02/22 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书