123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- # -*- 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
|