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程序设计有所帮助。