XML exporter erweitert

This commit is contained in:
2023-04-28 15:33:22 +02:00
parent ef2c9bfe6b
commit b22b9855fa
5 changed files with 103 additions and 28 deletions

View File

@@ -7,6 +7,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WWTech_KanalSchnittstelle.Exporter.Kandis;
using WWTech_KanalSchnittstelle.Exporter.XML;
namespace WWTech_KanalSchnittstelle.Exporter
{
@@ -18,6 +19,7 @@ namespace WWTech_KanalSchnittstelle.Exporter
switch(exportType)
{
case EExportType.KANDIS6: return new KANDIS60();
case EExportType.XML2006: return new XML2006();
default: throw new NotImplementedException();
}
}

View File

@@ -27,7 +27,7 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML
XmlElement xmlElement = CreateElementFor("Identifikation", _file);
xmlElement.SetAttribute("xmlns", "http://www.ofd-hannover.la/Identifikation");
XmlElement xmlElement2 = CreateElementFor("Version", xmlElement);
xmlElement2.InnerText = "2-3";
xmlElement2.InnerText = "2006-2";
DoAdmindata(xmlElement);
DoCollectives(xmlElement);
@@ -58,9 +58,15 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML
private void DoCollectives2Base(XmlElement dataCollectiveElement)
{
XmlElement parentElement = DoRow(dataCollectiveElement, "Stammdatenkollektiv");
foreach(Schacht schacht in _schaechte)
foreach (Kanal haltung in _haltungen)
{
XmlElement xmlElement = DoSchachtRow(schacht,parentElement, "AbwassertechnischeAnlage");
XmlElement xmlElement = DoHaltungRow(haltung, parentElement, "AbwassertechnischeAnlage");
}
foreach (Schacht schacht in _schaechte)
{
XmlElement xmlElement = DoSchachtRow(schacht, parentElement, "AbwassertechnischeAnlage");
}
}
@@ -83,14 +89,14 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML
XmlElement GeometrieElement = CreateElementFor("Geometrie", xmlElement);
XmlElement KnotenElement = CreateElementFor("Knoten", GeometrieElement);
XmlElement PunktElement = CreateElementFor("Punkt", KnotenElement);
DoRowValue(PunktElement, "Rechtswert", schacht.SohlRechtsWert.ToString());
DoRowValue(PunktElement, "Hochwert", schacht.SohlHochWert.ToString());
DoRowValue(PunktElement, "Punkthoehe", schacht.SohlHoehe.ToString());
DoRowValue(PunktElement, "Rechtswert", schacht.SohlRechtsWert.ToString().Replace(',', '.'));
DoRowValue(PunktElement, "Hochwert", schacht.SohlHochWert.ToString().Replace(',', '.'));
DoRowValue(PunktElement, "Punkthoehe", schacht.SohlHoehe.ToString().Replace(',', '.'));
DoRowValue(PunktElement, "PunktattributAbwasser", "SMP");
PunktElement = CreateElementFor("Punkt", KnotenElement);
DoRowValue(PunktElement, "Rechtswert", schacht.DeckelRechtsWert.ToString());
DoRowValue(PunktElement, "Hochwert", schacht.DeckelHochWert.ToString());
DoRowValue(PunktElement, "Punkthoehe", schacht.DeckelHoehe.ToString());
DoRowValue(PunktElement, "Rechtswert", schacht.DeckelRechtsWert.ToString().Replace(',', '.'));
DoRowValue(PunktElement, "Hochwert", schacht.DeckelHochWert.ToString().Replace(',', '.'));
DoRowValue(PunktElement, "Punkthoehe", schacht.DeckelHoehe.ToString().Replace(',', '.'));
DoRowValue(PunktElement, "PunktattributAbwasser", "DMP");
return xmlElement;
}
@@ -101,6 +107,48 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML
xmlElement = _file.CreateElement(orginalTableName);
parentElement.AppendChild(xmlElement);
DoRowValue(xmlElement, "Objektbezeichnung", haltung.Objektbezeichnung);
DoRowValue(xmlElement, "Objektart", "1");
DoRowValue(xmlElement, "Entwaesserungsart", haltung.Entwaesserung == EEntwaeserung.Regenwasser ? "KR" : haltung.Entwaesserung == EEntwaeserung.Schmutzwasser ? "KS" : "KM");
XmlElement xmlElement1 = CreateElementFor("Kante", xmlElement);
DoRowValue(xmlElement1, "KantenTyp", "0");
DoRowValue(xmlElement1, "KnotenZulauf", haltung.StartSchacht.Objektbezeichnung);
DoRowValue(xmlElement1, "KnotenZulaufTyp", "0");
DoRowValue(xmlElement1, "KnotenAblauf", haltung.EndSchacht.Objektbezeichnung);
DoRowValue(xmlElement1, "KnotenAblaufTyp", "0");
DoRowValue(xmlElement1, "Material", haltung.Material);
XmlElement xmlElement2 = CreateElementFor("Profil", xmlElement1);
DoRowValue(xmlElement2, "SonderprofilVorhanden", "0");
DoRowValue(xmlElement2, "Profilart", "0");
DoRowValue(xmlElement2, "Profilbreite", haltung.DN.ToString());
DoRowValue(xmlElement2, "Profilhoehe", haltung.DN.ToString());
xmlElement2 = CreateElementFor("Haltung", xmlElement1);
DoRowValue(xmlElement2, "HaltungsFunktion", "1");
DoRowValue(xmlElement2, "DMPLaenge", haltung.Haltungslaenge.ToString().Replace(',', '.'));
xmlElement1 = CreateElementFor("Lage", xmlElement);
xmlElement1 = CreateElementFor("Geometrie", xmlElement);
DoRowValue(xmlElement1, "GeoObjekttyp", "L");
xmlElement2 = CreateElementFor("Geometriedaten", xmlElement1);
XmlElement xmlElement3 = CreateElementFor("Kanten", xmlElement2);
XmlElement xmlElement4 = CreateElementFor("Kante", xmlElement3);
XmlElement xmlElement5 = CreateElementFor("Start", xmlElement4);
DoRowValue(xmlElement5, "Rechtswert", haltung.StartSchacht.SohlRechtsWert.ToString().Replace(',', '.'));
DoRowValue(xmlElement5, "Hochwert", haltung.StartSchacht.SohlHochWert.ToString().Replace(',', '.'));
DoRowValue(xmlElement5, "Punkthoehe", haltung.StartSchacht.SohlHoehe.ToString().Replace(',', '.'));
DoRowValue(xmlElement5, "PunktattributAbwasser", "SMP");
xmlElement5 = CreateElementFor("Ende", xmlElement4);
DoRowValue(xmlElement5, "Rechtswert", haltung.EndSchacht.SohlRechtsWert.ToString().Replace(',', '.'));
DoRowValue(xmlElement5, "Hochwert", haltung.EndSchacht.SohlHochWert.ToString().Replace(',', '.'));
DoRowValue(xmlElement5, "Punkthoehe", haltung.EndSchacht.SohlHoehe.ToString().Replace(',', '.'));
DoRowValue(xmlElement5, "PunktattributAbwasser", "SMP");
return xmlElement;
@@ -133,7 +181,7 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML
private XmlElement DoRowValue(XmlElement rowElement, string originColName, string value)
{
XmlElement xmlElement = CreateElementFor(originColName, rowElement);
if(value != "")
if (value != "")
{
xmlElement.InnerText = value;
}

View File

@@ -16,15 +16,26 @@ namespace WWTech_KanalSchnittstelle.Importer
}
public class CSVImporter : IImport
{
private string[] input;
private string[]? input;
private readonly Projekt projekt;
#pragma warning disable CS8618 // Ein Non-Nullable-Feld muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie die Deklaration als Nullable.
public CSVImporter(int projektID)
#pragma warning restore CS8618 // Ein Non-Nullable-Feld muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie die Deklaration als Nullable.
{
projekt = new Projekt() { Id = projektID };
}
private decimal parseKoordinate(string input)
{
decimal result = 0m;
input = string.Format("{0:0.000}", input).Replace('.', ',');
if(decimal.TryParse(input, out result))
{
throw new Exception("Konnte koordinate nicht parsen");
}
return result;
}
public List<Schacht> LoadSchaechte(string filename, EEntwaeserung entwaeserung)
{
List<Schacht> result = new List<Schacht>();
@@ -58,15 +69,15 @@ namespace WWTech_KanalSchnittstelle.Importer
if(kennung == EKennung.DECKEL)
{
schacht.DeckelRechtsWert = decimal.Parse(parsed[1].Replace('.', ','));
schacht.DeckelHochWert = decimal.Parse(parsed[2].Replace('.', ','));
schacht.DeckelHoehe = decimal.Parse(parsed[3].Replace('.', ','));
schacht.DeckelRechtsWert = parseKoordinate(parsed[1]);
schacht.DeckelHochWert = parseKoordinate(parsed[2]);
schacht.DeckelHoehe = parseKoordinate(parsed[3]);
}
if(kennung == EKennung.SOHLE)
{
schacht.SohlRechtsWert = decimal.Parse(parsed[1].Replace('.', ','));
schacht.SohlHochWert = decimal.Parse(parsed[2].Replace('.', ','));
schacht.SohlHoehe = decimal.Parse(parsed[3].Replace('.', ','));
schacht.SohlRechtsWert = parseKoordinate(parsed[1]);
schacht.SohlHochWert = parseKoordinate(parsed[2]);
schacht.SohlHoehe = parseKoordinate(parsed[3]);
}