Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. import xml.etree.ElementTree as ET
  2. from lxml import etree
  3. import json
  4. import re
  5.  
  6. def dict_to_str(dic_t):
  7. s = ''
  8. for key, value in dic_t.items():
  9. s += key + '=' + '"' + value + '"'
  10. return s
  11.  
  12.  
  13. def cleanhtml(raw_html):
  14. cleanr = re.compile('<.*?[^/]>')
  15. cleantext = re.sub(cleanr, '', raw_html)
  16. return cleantext
  17.  
  18.  
  19. class XLML:
  20. def __init__(self):
  21. self.str_xml = ''
  22.  
  23. def some_tags_parse(self, name_file, *args):
  24. tags_list = []
  25. my_list = []
  26. for i in args:
  27. tags_list.append(i)
  28. tree = ET.parse(name_file)#парсинг из файла
  29. root = tree.getroot()#получение корня
  30. if len(tags_list) != 0:#если переданы теги, у которых нужно вытягивать текст
  31. for it in root.iter():
  32. for it_tag in tags_list:
  33. if it.tag == it_tag:
  34. my_list.append(it.text)
  35. else:#если определенные теги, у которых нужно вытягиват текст не переданы
  36. for it in root.iter():
  37. if it.tag != "":
  38. my_list.append(it.text)
  39. my_list_2 = []
  40. for element in my_list:
  41. if element != None:
  42. my_list_2.append(element)
  43. return ' '.join(my_list_2)
  44.  
  45. def specific_tags_not_parse(self, name_file, *args):
  46. f = open(name_file, 'r', encoding="UTF-8")
  47. string = f.read()
  48.  
  49. tags_list = []
  50. for i in args:
  51. tags_list.append(i)
  52.  
  53. tree = ET.parse(name_file)
  54. root = tree.getroot()
  55. my_list = []
  56.  
  57.  
  58. se_t = []#множество для всех открывающихся и закрывающихся одновременно тегов
  59. element = re.findall('<.*?[/]>', string)
  60.  
  61. for x in element:
  62. se_t.append(x)
  63.  
  64. tags = ''#все теги
  65. for it in root.iter():
  66. tags += ' ' + it.tag
  67.  
  68. element_2 = re.findall('{.*?}.*?', tags)#множество всех тегов с пространством имен
  69. set_namespace = []#множество всех тегов с пространством имен, которые мы имеем
  70.  
  71. for x in element_2:
  72. set_namespace.append(x)
  73.  
  74. dict_tags = {}#словарь всех тегов и их текстов
  75.  
  76.  
  77. for it in root.iter():
  78. for nm in set_namespace:
  79. if nm.find(it.tag) != -1:
  80. dict_tags[re.sub(r"\([^{}]+\)", "", it.tag)] = it.text
  81. else:
  82. set_tags.append[it.tag] = it.text
  83.  
  84. for it in dict_tags:
  85. for it_tag in set_tags:
  86. if it != it_tag:
  87. my_list.append(it)
  88. else:
  89. for a in se_t:
  90. if a.find(it.tag) != -1:
  91. my_list.append('<{} {}/>'.format(it.tag, dict_to_str(it.attrib)))
  92.  
  93. else:
  94. my_list.append('<{} {}>'.format(it.tag, dict_to_str(it.attrib)))
  95. my_list.append(it.text)
  96. my_list.append('</{} {}>'.format(it.tag, dict_to_str(it.attrib)))
  97. my_list_2 = []
  98. for i in my_list:
  99. if i != None:
  100. my_list_2.append(i)
  101. return ' '.join(my_list_2)
  102.  
  103.  
  104. def converting_XML_to_JSON(self):
  105. return json.dumps(self.str_xml)
  106.  
  107. a = XLML()
  108. print(a.specific_tags_not_parse('note2.xml', 'semantics'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement