This commit is contained in:
2025-06-05 16:50:32 +05:00
parent fa10c8abbc
commit 15cfd30086
3 changed files with 174 additions and 16 deletions

141
main1.py
View File

@@ -1,21 +1,132 @@
import xml.etree.ElementTree as ET
from bs4 import BeautifulSoup
from lxml import etree
def open_file(file_path):
with open(file_path, 'r') as f:
data = f.read()
Bs_data = BeautifulSoup(data, "xml")
b_unique = Bs_data.find_all('unique')
data=[]
class Data_farame():
def __init__(self,section_KPTR,cadastral_number,cadastral_quarter,object_type,land_plot_area,error_in_determining_area,availability_coordinates,explanations):
self.section_KPTR = section_KPTR #Раздел КПТР
self.cadastral_number = cadastral_number #Кадастровый номер
self.cadastral_quarter = cadastral_quarter #Кадастровый квартал
self.object_type = object_type #Вид объекта
self.land_plot_area = land_plot_area #Площадь ЗУ
self.error_in_determining_area = error_in_determining_area #Погрешность определения площади
self.availability_coordinates = availability_coordinates #наличие координат
self.explanations = explanations #Пояснения
class SpecifyParcel():
print(b_unique)
b_name = Bs_data.find('child', {'name':'Frank'})
def chec_koordinat(new_parcel):
if 'EntitySpatial' in new_parcel:
if 'SpatialElement' in new_parcel['EntitySpatial']:
return "да"
else:
return "нет"
else:
return "нет"
print(b_name)
value = b_name.get('test')
def chec_tag_ProvidingPassCadastralNumbers(ProvidingPassCadastralNumbers):
if 'ProvidingPassCadastralNumbers' in ProvidingPassCadastralNumbers['ExistParcel'][0]:
return ProvidingPassCadastralNumbers['ExistParcel'][0]['ProvidingPassCadastralNumbers'][0]['Other'][0]['#text']
else:
return ""
def chec_tag_Explanation(Explanation):
if 'Explanation' in Explanation['ExistParcel'][0]:
return Explanation['ExistParcel'][0]['Explanation'][0]['#text']
else:
return ""
print(value)
def __init__(self):
try:
for i,item in enumerate(xml_dict['Package'][0]['SpecifyParcels'][0]['SpecifyParcel']):
data.append(
Data_farame(
section_KPTR="Уточнение ЗУ",
cadastral_number=item['ExistParcel'][0]['@attributes']["CadastralNumber"],
cadastral_quarter=item['ExistParcel'][0]['CadastralBlock'][0]['#text'],
object_type=self.chec_tag_ProvidingPassCadastralNumbers(ProvidingPassCadastralNumbers=item),
land_plot_area=item['ExistParcel'][0]['Area'][0]['Area'][0]['#text'],
error_in_determining_area=item['ExistParcel'][0]['Area'][0]['Inaccuracy'][0]['#text'],
availability_coordinates=self.chec_koordinat(item['ExistParcel'][0]['EntitySpatial'][0]),
explanations=self.chec_tag_Explanation(Explanation=item)
)
)
except:
return
class NewParcel:
open_file("C:/Users/jze9/Documents/work/git/kadastr12/test/MapPlanTerritory_E2DF5B75-E136-48DA-BB4C-8887BA4ABF46.xml")
def add_new_data(self,doc_category):
data=""
for item in doc_category:
data += f"{item}: {doc_category[item][0]['#text']}, "
return data
def chec_koordinat(self,new_parcel):
if 'EntitySpatial' in new_parcel:
if 'SpatialElement' in new_parcel['EntitySpatial'][0]:
return "да"
else:
return "нет"
else:
return "нет"
def get_cad_number(self,object_realty):
cad_nimbers = ""
for item in object_realty:
cad_nimbers+=f"{item['InnerCadastralNumbers'][0]['CadastralNumber'][0]['#text']}, "
return cad_nimbers
def __init__(self,xml_dict):
try:
for new_parcel in xml_dict['Package'][0]['FormParcels'][0]['NewParcel']:
data.append(
Data_farame(
section_KPTR="Образование ЗУ",
cadastral_number=self.get_cad_number(new_parcel['ObjectsRealty'][0]['ObjectRealty']),
cadastral_quarter=new_parcel['CadastralBlock'][0]['#text'],
object_type="",
land_plot_area=new_parcel['Area'][0]['Area'][0]['#text'],
error_in_determining_area=new_parcel['Area'][0]['Inaccuracy'][0]['#text'],
availability_coordinates=self.chec_koordinat(new_parcel),
explanations=self.add_new_data(new_parcel['Category'][0]['DocCategory'][0])
)
)
except:
return
def lxml_to_dict(element):
result = {}
# Обрабатываем атрибуты (если есть)
if element.attrib:
result["@attributes"] = element.attrib
# Обрабатываем текстовое содержимое (если есть)
if element.text and element.text.strip():
result["#text"] = element.text.strip()
# Группируем все дочерние элементы в списки
children_by_tag = {}
for child in element:
child_tag = child.tag
if child_tag not in children_by_tag:
children_by_tag[child_tag] = []
children_by_tag[child_tag].append(lxml_to_dict(child))
# Добавляем в результат (всегда списками)
for tag, children in children_by_tag.items():
result[tag] = children # Всегда массив, даже если элемент один
return result
#tree = etree.parse('C:/Users/USER/Downloads/12. ХМЛ КПТР в ексель/Исходные данные/Карта-план в хмл прмиер Копейск на кк 74 30 0104002/MapPlanTerritory_54F3719F-2ED8-48FF-8442-9813191EBA51.xml')
tree = etree.parse('C:/Users/USER/Downloads/12. ХМЛ КПТР в ексель/Исходные данные/Карта-план в хмл прмиер Копейск на кк 74 30 0104002/MapPlanTerritory_E2DF5B75-E136-48DA-BB4C-8887BA4ABF46.xml')
xml_dict = lxml_to_dict(tree.getroot())
temp = NewParcel(xml_dict)
pass