XML Aufbereitung
parent
38d8a0aec7
commit
a2e96559cf
@ -0,0 +1,124 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# "C:\Program Files\QGIS 3.26.3\bin\Ogr2ogr.exe" -f GMLAS C:\temp-GIS\2026-04-08_export.xml C:\temp-GIS\fridolfing_kanal.gpkg
|
||||
|
||||
|
||||
# "C:\Program Files\QGIS 3.26.3\bin\Ogr2ogr.exe" -f GML C:\temp-GIS\2026-04-08_export.xml C:\temp-GIS\fridolfing_kanal.gpkg -lco GML_ID=YES -lco XSD="C:\temp-GIS\_isy\2013\1_XML-Schema\1302-metadaten.xsd"
|
||||
|
||||
##"C:\Program Files\QGIS 3.26.3\bin"\ogr2ogr.exe -f GPKG %GPKGDatei% GMLAS:%IsybauXMLDatei% -oo XSD=C:\temp-GIS\_isy\2013\1_XML-Schema\1302-metadaten.xsd -forceNullable -oo CONFIG_FILE=C:\temp-GIS\_isy\gmlasconf.xml -oo REMOVE_UNUSED_LAYERS=YES -oo REMOVE_UNUSED_FIELDS=YES
|
||||
|
||||
|
||||
import re
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
filedir = "C:/temp-GIS/"
|
||||
xmlfile = "2026-04-08_export"
|
||||
|
||||
with open(filedir+xmlfile+".xml", "r") as infile:
|
||||
content = infile.read()
|
||||
|
||||
pattern = re.compile(r"<wfs:[\s\S]*?>")
|
||||
content = pattern.sub("", content)
|
||||
|
||||
pattern = re.compile(r"</wfs:.*?>")
|
||||
content = pattern.sub("", content)
|
||||
|
||||
pattern = re.compile(r"<Identifikation>")
|
||||
content = pattern.sub("<Identifikation xmlns=\"http://www.bfr-abwasser.de\">", content)
|
||||
|
||||
pattern = re.compile(r"2017/07/01")
|
||||
content = pattern.sub("2017-07", content)
|
||||
|
||||
pattern = re.compile(r" xsi:nil=\"true\"")
|
||||
content = pattern.sub("", content)
|
||||
|
||||
pattern = re.compile(r"<Baujahr>0</Baujahr>")
|
||||
content = pattern.sub("", content)
|
||||
|
||||
|
||||
xmlReplaceTag = ["Datenkollektive", "Geometrie", "Geometriedaten", "Knoten"]
|
||||
|
||||
for x in xmlReplaceTag:
|
||||
pattern = re.compile(r"</"+x+">\s*<"+x+">")
|
||||
content = pattern.sub("", content)
|
||||
|
||||
|
||||
pattern = re.compile(r"<Knoten>\s*</Knoten>")
|
||||
content = pattern.sub("", content)
|
||||
|
||||
|
||||
|
||||
###
|
||||
### Boolean korrigieren
|
||||
###
|
||||
### 14.04.2026: Tabelle: _ogr_fields_metadata wurde field_type von boolean auf string verändert, da es bei boolean zur Ausgabe Null = False gekommen ist.
|
||||
###
|
||||
|
||||
list_bool = ["Bautechnik", "Geometrie", "Sanierung", "Umfeld", "Inspektion", "Dichtheit", "Film", "Verfahren", "Rechennetz", "Gebiet", "Flaechen", "Belastung", "Berechnung", "Beobachtung", "SonderprofilVorhanden", "DrainageAngeschlossen","Einstieghilfe", "Uebergabeschacht", "Abdeckplatte", "Konus", "Uebergangsplatte", "Podest", "Uebergabepunkt", "Uebergabebauwerk", "Bypass", "Schwimmerabschluss", "ExistenzPumpe", "ExistenzUeberlauf", "ExistenzFiltersack", "Ueberschwemmungsgebiet", "Schmutzfaenger", "Dichtheitspruefung", "Reinigung", "Verbindung", "BDEZulaufDrainage", "DDEZulaufDrainage", "Pruefergebnis", "FilmpfadIstAbsolut", "VerlustansatzA110", "DruckdichterDeckel", "Rueckschlagklappe", "Bezugslinie"]
|
||||
|
||||
# Setze 0 = False und 1 = True
|
||||
for i in list_bool:
|
||||
pattern = re.compile(r"<"+i+">0</"+i+">")
|
||||
content = pattern.sub(r"<"+i+">false</"+i+">", content)
|
||||
pattern = re.compile(r"<"+i+">1</"+i+">")
|
||||
content = pattern.sub(r"<"+i+">true</"+i+">", content)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
with open(filedir+xmlfile+"_new.xml", "w") as outfile:
|
||||
outfile.write(content)
|
||||
|
||||
#######
|
||||
####### RUNDUNG
|
||||
#######
|
||||
|
||||
input_xml = filedir+xmlfile+"_new.xml"
|
||||
output_xml = filedir+xmlfile+"_new2.xml"
|
||||
|
||||
# Hier pro Tag die Rundung definieren
|
||||
tag_rules = {
|
||||
"Rechtswert": 3,
|
||||
"Hochwert": 3,
|
||||
"Punkthoehe": 3,
|
||||
"Schachttiefe": 2,
|
||||
"Laenge": 2,
|
||||
"Entfernung": 2,
|
||||
"Rohrlaenge": 2,
|
||||
"SohlhoeheZulauf": 3,
|
||||
"SohlhoeheAblauf": 3,
|
||||
"DMPLaenge": 2
|
||||
}
|
||||
|
||||
# Regex: <tag>wert</tag>
|
||||
pattern = re.compile(r"<(\w+)>(.*?)</\1>")
|
||||
|
||||
def process_line(line):
|
||||
def replace(match):
|
||||
tag = match.group(1)
|
||||
content = match.group(2)
|
||||
|
||||
# Nur bearbeiten, wenn Tag in Regeln
|
||||
if tag in tag_rules:
|
||||
try:
|
||||
value = float(content)
|
||||
decimals = tag_rules[tag]
|
||||
rounded = round(value, decimals)
|
||||
return f"<{tag}>{rounded}</{tag}>"
|
||||
except ValueError:
|
||||
pass # kein numerischer Wert → unverändert
|
||||
|
||||
return match.group(0) # Original zurückgeben
|
||||
|
||||
return pattern.sub(replace, line)
|
||||
|
||||
with open(input_xml, "r", encoding="utf-8") as infile, \
|
||||
open(output_xml, "w", encoding="utf-8") as outfile:
|
||||
|
||||
for line in infile:
|
||||
new_line = process_line(line)
|
||||
outfile.write(new_line)
|
||||
@ -0,0 +1,26 @@
|
||||
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)
|
||||
|
||||
Loading…
Reference in New Issue