首页 > 后端开发 > Python教程 > python比较2个xml内容的方法

python比较2个xml内容的方法

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-06 11:16:24
原创
1887 人浏览过

本文实例讲述了python比较2个xml内容的方法。分享给大家供大家参考。具体分析如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

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

登录后复制

调用:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

if __name__ == '__main__':

  s1 = '''''<&#63;xml version="1.0" encoding="UTF-8"&#63;> \

     <employees> \

     <employee id = '1'> \

      <name>linux</name>\

      <age>30</age>\

     </employee>\

     <employee id = '2'> \

      <name>windows</name>\

      <age>20</age>\

     </employee>\

     </employees>''

  s2 = '''''<&#63;xml version="1.0" encoding="UTF-8"&#63;> \

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

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
python - ubuntu16.04 lxml的报错
来自于 1970-01-01 08:00:00
0
0
0
有办法在PHP里写Python吗?
来自于 1970-01-01 08:00:00
0
0
0
python scrapy爬虫错误
来自于 1970-01-01 08:00:00
0
0
0
python相关问题求解决,有偿
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板