python比较2个xml内容的方法
本文实例讲述了python比较2个xml内容的方法。分享给大家供大家参考。具体分析如下:
fromxml.etreeimportElementTree OK=True main_pid=10000 loop_depth=0 defcompare_xml(left,right,key_info='.'): globalloop_depth loop_depth+=1 ifloop_depth==1:print ifleft.tag!=right.tag: print_diff(main_pid,key_info,'difftag',left.tag,right.tag) return ifleft.text!=right.text: print_diff(main_pid,key_info,'difftext',left.text,right.text) return leftitems=dict(left.items()) rightitems=dict(right.items()) fork,vinleftitems.items(): ifknotinrightitems: s='%s/%s'%(key_info,left.tag) print_diff(main_pid,s,'lostattr',k,"") fork,vinrightitems.items(): ifknotinleftitems: 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) ifleftlen!=rightlen: s='%s/%s'%(key_info,right.tag) print_diff(main_pid,s,'difflen',leftlen,rightlen) return l=leftlen<rightlenandleftlenorrightlen d={} foriinxrange(l): node=leftnodes[i] ifnode.tagnotind: 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) defprint_diff(main_pid,key_info,msg,base_type,test_type): globalOK info=u'[%-5s]%s->%-40s[%s!=%s]'%(msg.upper(),main_pid,key_info.strip('./'),base_type,test_type) printinfo.encode('gbk') OK=False
调用:
if__name__=='__main__': s1='''''<?xmlversion="1.0"encoding="UTF-8"?>\ <employees>\ <employeeid='1'>\ <name>linux</name>\ <age>30</age>\ </employee>\ <employeeid='2'>\ <name>windows</name>\ <age>20</age>\ </employee>\ </employees>''' s2='''''<?xmlversion="1.0"encoding="UTF-8"?>\ <employees>\ <employeeid='3'>\ <name>windows</name>\ <age>20</age>\ </employee>\ <employeeid='4'>\ <name>linux</name>\ <age>30</age>\ </employee>\ </employees>''' lroot=ElementTree.fromstring(s1) rroot=ElementTree.fromstring(s2) compare_xml(lroot,rroot)
希望本文所述对大家的Python程序设计有所帮助。