Files
kadastr12/main1.py
2025-06-05 16:50:32 +05:00

133 lines
6.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from lxml import etree
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():
def chec_koordinat(new_parcel):
if 'EntitySpatial' in new_parcel:
if 'SpatialElement' in new_parcel['EntitySpatial']:
return "да"
else:
return "нет"
else:
return "нет"
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 ""
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:
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