Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import xml.etree.ElementTree as ET
- from lxml import etree
- import json
- import re
- def dict_to_str(dic_t):
- s = ''
- for key, value in dic_t.items():
- s += key + '=' + '"' + value + '"'
- return s
- def cleanhtml(raw_html):
- cleanr = re.compile('<.*?[^/]>')
- cleantext = re.sub(cleanr, '', raw_html)
- return cleantext
- class XLML:
- def __init__(self):
- self.str_xml = ''
- def some_tags_parse(self, name_file, *args):
- tags_list = []
- my_list = []
- for i in args:
- tags_list.append(i)
- tree = ET.parse(name_file)#парсинг из файла
- root = tree.getroot()#получение корня
- if len(tags_list) != 0:#если переданы теги, у которых нужно вытягивать текст
- for it in root.iter():
- for it_tag in tags_list:
- if it.tag == it_tag:
- my_list.append(it.text)
- else:#если определенные теги, у которых нужно вытягиват текст не переданы
- for it in root.iter():
- if it.tag != "":
- my_list.append(it.text)
- my_list_2 = []
- for element in my_list:
- if element != None:
- my_list_2.append(element)
- return ' '.join(my_list_2)
- def specific_tags_not_parse(self, name_file, *args):
- f = open(name_file, 'r', encoding="UTF-8")
- string = f.read()
- tags_list = []
- for i in args:
- tags_list.append(i)
- tree = ET.parse(name_file)
- root = tree.getroot()
- my_list = []
- se_t = []#множество для всех открывающихся и закрывающихся одновременно тегов
- element = re.findall('<.*?[/]>', string)
- for x in element:
- se_t.append(x)
- tags = ''#все теги
- for it in root.iter():
- tags += ' ' + it.tag
- element_2 = re.findall('{.*?}.*?', tags)#множество всех тегов с пространством имен
- set_namespace = []#множество всех тегов с пространством имен, которые мы имеем
- for x in element_2:
- set_namespace.append(x)
- dict_tags = {}#словарь всех тегов и их текстов
- for it in root.iter():
- for nm in set_namespace:
- if nm.find(it.tag) != -1:
- dict_tags[re.sub(r"\([^{}]+\)", "", it.tag)] = it.text
- else:
- set_tags.append[it.tag] = it.text
- for it in dict_tags:
- for it_tag in set_tags:
- if it != it_tag:
- my_list.append(it)
- else:
- for a in se_t:
- if a.find(it.tag) != -1:
- my_list.append('<{} {}/>'.format(it.tag, dict_to_str(it.attrib)))
- else:
- my_list.append('<{} {}>'.format(it.tag, dict_to_str(it.attrib)))
- my_list.append(it.text)
- my_list.append('</{} {}>'.format(it.tag, dict_to_str(it.attrib)))
- my_list_2 = []
- for i in my_list:
- if i != None:
- my_list_2.append(i)
- return ' '.join(my_list_2)
- def converting_XML_to_JSON(self):
- return json.dumps(self.str_xml)
- a = XLML()
- print(a.specific_tags_not_parse('note2.xml', 'semantics'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement