xmltojson.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. # -*- coding: utf-8 -*-
  2. # python xml.etree.ElementTree
  3. import os
  4. import xml.etree.ElementTree as ET
  5. from xml.dom import minidom
  6. class xmltojson:
  7. # global var
  8. # show log
  9. SHOW_LOG = True
  10. # XML file
  11. XML_PATH = None
  12. a = {}
  13. m = []
  14. def get_root(self, path):
  15. '''parse the XML file,and get the tree of the XML file
  16. finally,return the root element of the tree.
  17. if the XML file dose not exist,then print the information'''
  18. # if os.path.exists(path):
  19. # if SHOW_LOG:
  20. # print('start to parse the file : [{}]'.format(path))
  21. tree = ET.fromstring(path)
  22. return tree
  23. # else:
  24. # print('the path [{}] dose not exist!'.format(path))
  25. def get_element_tag(self, element):
  26. '''return the element tag if the element is not None.'''
  27. if element is not None:
  28. return element.tag
  29. else:
  30. print('the element is None!')
  31. def get_element_attrib(self, element):
  32. '''return the element attrib if the element is not None.'''
  33. if element is not None:
  34. return element.attrib
  35. else:
  36. print('the element is None!')
  37. def get_element_text(self, element):
  38. '''return the text of the element.'''
  39. if element is not None:
  40. return element.text
  41. else:
  42. print('the element is None!')
  43. def get_element_children(self, element):
  44. '''return the element children if the element is not None.'''
  45. if element is not None:
  46. return [c for c in element]
  47. else:
  48. print('the element is None!')
  49. def get_elements_tag(self, elements):
  50. '''return the list of tags of element's tag'''
  51. if elements is not None:
  52. tags = []
  53. for e in elements:
  54. tags.append(e.tag)
  55. return tags
  56. else:
  57. print('the elements is None!')
  58. def get_elements_attrib(self, elements):
  59. '''return the list of attribs of element's attrib'''
  60. if elements is not None:
  61. attribs = []
  62. for a in elements:
  63. attribs.append(a.attrib)
  64. return attribs
  65. else:
  66. print('the elements is None!')
  67. def get_elements_text(self, elements):
  68. '''return the dict of element'''
  69. if elements is not None:
  70. text = []
  71. for t in elements:
  72. text.append(t.text)
  73. return dict(zip(self.get_elements_tag(elements), text))
  74. else:
  75. print('the elements is None!')
  76. def main(self, xml):
  77. # root
  78. root = self.get_root(xml)
  79. # children
  80. children = self.get_element_children(root)
  81. children_tags = self.get_elements_tag(children)
  82. children_attribs = self.get_elements_attrib(children)
  83. i = 0
  84. # 获取二级元素的每一个子节点的名称和值
  85. for c in children:
  86. p = 0
  87. c_children = self.get_element_children(c)
  88. dict_text = self.get_elements_text(c_children)
  89. if dict_text:
  90. # print (children_tags[i])
  91. if children_tags[i] == 'TemplateSMS':
  92. self.a['templateSMS'] = dict_text
  93. else:
  94. if children_tags[i] == 'SubAccount':
  95. k = 0
  96. for x in children:
  97. if children_tags[k] == 'totalCount':
  98. self.m.append(dict_text)
  99. self.a['SubAccount'] = self.m
  100. p = 1
  101. k = k + 1
  102. if p == 0:
  103. self.a[children_tags[i]] = dict_text
  104. else:
  105. self.a[children_tags[i]] = dict_text
  106. else:
  107. self.a[children_tags[i]] = c.text
  108. i = i + 1
  109. return self.a
  110. def main2(self, xml):
  111. # root
  112. root = self.get_root(xml)
  113. # children
  114. children = self.get_element_children(root)
  115. children_tags = self.get_elements_tag(children)
  116. children_attribs = self.get_elements_attrib(children)
  117. i = 0
  118. # 获取二级元素的每一个子节点的名称和值
  119. for c in children:
  120. p = 0
  121. c_children = self.get_element_children(c)
  122. dict_text = self.get_elements_text(c_children)
  123. if dict_text:
  124. if children_tags[i] == 'TemplateSMS':
  125. k = 0
  126. for x in children:
  127. if children_tags[k] == 'totalCount':
  128. self.m.append(dict_text)
  129. self.a['TemplateSMS'] = self.m
  130. p = 1
  131. k = k + 1
  132. if p == 0:
  133. self.a[children_tags[i]] = dict_text
  134. else:
  135. self.a[children_tags[i]] = dict_text
  136. else:
  137. self.a[children_tags[i]] = c.text
  138. i = i + 1
  139. return self.a