From 7beb56b15f3f1f65782478894acf7664d984a11e Mon Sep 17 00:00:00 2001 From: spertl Date: Mon, 20 Apr 2026 20:01:07 +0000 Subject: [PATCH] =?UTF-8?q?Erg=C3=A4nzung=20ermittlung=20Objektbezeichnung?= =?UTF-8?q?=20zum=20Fehler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/validate_xml_isybau.py | 90 ++++++++++++++++++++++++---------- 1 file changed, 64 insertions(+), 26 deletions(-) diff --git a/scripts/validate_xml_isybau.py b/scripts/validate_xml_isybau.py index 2e6041d..dfa433f 100644 --- a/scripts/validate_xml_isybau.py +++ b/scripts/validate_xml_isybau.py @@ -1,26 +1,64 @@ -from lxml import etree - -# XML-Datei laden -with open("C:/temp-GIS/2026-04-08_export_new2.xml", "rb") as xml_file: - xml_doc = etree.parse(xml_file) - -# XSD-Datei laden -with open('C:/temp-GIS/_isy/2017/1_XML-Schema/1707-metadaten.xsd', "rb") as xsd_file: - xsd_doc = etree.parse(xsd_file) - -# Schema erstellen -xmlschema = etree.XMLSchema(xsd_doc) - -# Validieren -if xmlschema.validate(xml_doc): - print("XML ist gültig ✅") -else: - print("XML ist NICHT gültig ❌") - with open("C:/temp-GIS/fehler.log", "w", encoding="utf-8") as log_file: - count = 0 - for error in xmlschema.error_log: - log_file.write(f"Zeile: {error.line}, Spalte: {error.column}; ") - log_file.write(f"Fehler: {error.message}\n") - count = count + 1 - print("Anzahl Fehler: ", count) - +from lxml import etree +import re + +xml_path = "C:/temp-GIS/2026-04-08_export_new2.xml" +xsd_path = 'C:/temp-GIS/_isy/2017/1_XML-Schema/1707-metadaten.xsd' + + +try: + with open(dateipfad, 'r', encoding='utf-8') as f: + zeilen = f.readlines() +except FileNotFoundError: + return "Datei nicht gefunden." + +def finde_letzte_bezeichnung(zeilen, ziel_zeile): + """ + Sucht rückwärts ab ziel_zeile nach dem Tag . + """ + + # Überprüfung der Zeilennummer + if ziel_zeile > len(zeilen): + return "Fehler: Zeilennummer existiert nicht." + + # Suche rückwärts von der Zielzeile (Index = Zeile - 1) + for i in range(ziel_zeile - 1, -1, -1): + aktuelle_zeile = zeilen[i] + # Regex sucht nach dem Inhalt zwischen den Tags + treffer = re.search(r'(.*?)', aktuelle_zeile) + if treffer: + return treffer.group(1).strip() + + # Falls der Tag über mehrere Zeilen geht oder nur der Start-Tag da ist + if '' in aktuelle_zeile: + # Extrahiere Text nach dem Start-Tag in dieser Zeile + text = aktuelle_zeile.split('')[-1].strip() + return text if text else "Tag gefunden, Inhalt leer oder mehrzeilig." + + return "Keine oberhalb dieser Zeile gefunden." + + +# XML-Datei laden +with open("C:/temp-GIS/2026-04-08_export_new2.xml", "rb") as xml_file: + xml_doc = etree.parse(xml_file) + +# XSD-Datei laden +with open('C:/temp-GIS/_isy/2017/1_XML-Schema/1707-metadaten.xsd', "rb") as xsd_file: + xsd_doc = etree.parse(xsd_file) + +# Schema erstellen +xmlschema = etree.XMLSchema(xsd_doc) + +# Validieren +if xmlschema.validate(xml_doc): + print("XML ist gültig ✅") +else: + print("XML ist NICHT gültig ❌") + with open("C:/temp-GIS/fehler.log", "w", encoding="utf-8") as log_file: + count = 0 + for error in xmlschema.error_log: + log_file.write(f"Zeile: {error.line}, Spalte: {error.column}; ") + ergebnis = finde_letzte_bezeichnung(zeilen, error.line) + log_file.write(f"{ergebnis};Fehler: {error.message}\n") + count = count + 1 + print("Anzahl Fehler: ", count) +