171 lines
5.0 KiB
Python
171 lines
5.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# python xml.etree.ElementTree
|
|
|
|
import os
|
|
import xml.etree.ElementTree as ET
|
|
from xml.dom import minidom
|
|
|
|
|
|
class xmltojson:
|
|
# global var
|
|
# show log
|
|
SHOW_LOG = True
|
|
# XML file
|
|
XML_PATH = None
|
|
a = {}
|
|
m = []
|
|
|
|
def get_root(self, path):
|
|
'''parse the XML file,and get the tree of the XML file
|
|
finally,return the root element of the tree.
|
|
if the XML file dose not exist,then print the information'''
|
|
# if os.path.exists(path):
|
|
# if SHOW_LOG:
|
|
# print('start to parse the file : [{}]'.format(path))
|
|
tree = ET.fromstring(path)
|
|
return tree
|
|
# else:
|
|
# print('the path [{}] dose not exist!'.format(path))
|
|
|
|
def get_element_tag(self, element):
|
|
'''return the element tag if the element is not None.'''
|
|
if element is not None:
|
|
|
|
return element.tag
|
|
else:
|
|
print('the element is None!')
|
|
|
|
def get_element_attrib(self, element):
|
|
'''return the element attrib if the element is not None.'''
|
|
if element is not None:
|
|
|
|
return element.attrib
|
|
else:
|
|
print('the element is None!')
|
|
|
|
def get_element_text(self, element):
|
|
'''return the text of the element.'''
|
|
if element is not None:
|
|
return element.text
|
|
else:
|
|
print('the element is None!')
|
|
|
|
def get_element_children(self, element):
|
|
'''return the element children if the element is not None.'''
|
|
if element is not None:
|
|
|
|
return [c for c in element]
|
|
else:
|
|
print('the element is None!')
|
|
|
|
def get_elements_tag(self, elements):
|
|
'''return the list of tags of element's tag'''
|
|
if elements is not None:
|
|
tags = []
|
|
for e in elements:
|
|
tags.append(e.tag)
|
|
return tags
|
|
else:
|
|
print('the elements is None!')
|
|
|
|
def get_elements_attrib(self, elements):
|
|
'''return the list of attribs of element's attrib'''
|
|
if elements is not None:
|
|
attribs = []
|
|
for a in elements:
|
|
attribs.append(a.attrib)
|
|
return attribs
|
|
else:
|
|
print('the elements is None!')
|
|
|
|
def get_elements_text(self, elements):
|
|
'''return the dict of element'''
|
|
if elements is not None:
|
|
text = []
|
|
for t in elements:
|
|
text.append(t.text)
|
|
return dict(zip(self.get_elements_tag(elements), text))
|
|
else:
|
|
print('the elements is None!')
|
|
|
|
def main(self, xml):
|
|
# root
|
|
root = self.get_root(xml)
|
|
|
|
# children
|
|
children = self.get_element_children(root)
|
|
|
|
children_tags = self.get_elements_tag(children)
|
|
|
|
children_attribs = self.get_elements_attrib(children)
|
|
|
|
i = 0
|
|
|
|
# 获取二级元素的每一个子节点的名称和值
|
|
for c in children:
|
|
p = 0
|
|
c_children = self.get_element_children(c)
|
|
dict_text = self.get_elements_text(c_children)
|
|
if dict_text:
|
|
# print (children_tags[i])
|
|
if children_tags[i] == 'TemplateSMS':
|
|
self.a['templateSMS'] = dict_text
|
|
else:
|
|
if children_tags[i] == 'SubAccount':
|
|
k = 0
|
|
|
|
for x in children:
|
|
if children_tags[k] == 'totalCount':
|
|
self.m.append(dict_text)
|
|
self.a['SubAccount'] = self.m
|
|
p = 1
|
|
k = k + 1
|
|
if p == 0:
|
|
self.a[children_tags[i]] = dict_text
|
|
else:
|
|
self.a[children_tags[i]] = dict_text
|
|
|
|
|
|
else:
|
|
self.a[children_tags[i]] = c.text
|
|
i = i + 1
|
|
return self.a
|
|
|
|
def main2(self, xml):
|
|
# root
|
|
root = self.get_root(xml)
|
|
|
|
# children
|
|
children = self.get_element_children(root)
|
|
|
|
children_tags = self.get_elements_tag(children)
|
|
|
|
children_attribs = self.get_elements_attrib(children)
|
|
|
|
i = 0
|
|
|
|
# 获取二级元素的每一个子节点的名称和值
|
|
for c in children:
|
|
p = 0
|
|
c_children = self.get_element_children(c)
|
|
dict_text = self.get_elements_text(c_children)
|
|
if dict_text:
|
|
if children_tags[i] == 'TemplateSMS':
|
|
k = 0
|
|
|
|
for x in children:
|
|
if children_tags[k] == 'totalCount':
|
|
self.m.append(dict_text)
|
|
self.a['TemplateSMS'] = self.m
|
|
p = 1
|
|
k = k + 1
|
|
if p == 0:
|
|
self.a[children_tags[i]] = dict_text
|
|
else:
|
|
self.a[children_tags[i]] = dict_text
|
|
|
|
else:
|
|
self.a[children_tags[i]] = c.text
|
|
i = i + 1
|
|
return self.a
|