From 765b914624fdd622fe751af8975096a912148da7 Mon Sep 17 00:00:00 2001 From: HuskyTeufel Date: Wed, 4 Aug 2021 13:21:18 +0200 Subject: [PATCH] =?UTF-8?q?XML=20datei=20wird=20nun=20vollst=C3=A4ndig=20g?= =?UTF-8?q?eparst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XMLParser/AbwassertechnischeAnlage.cs | 2 +- XMLParser/Enums.cs | 16 ++ .../InspizierteAbwassertechnischeAnlage.cs | 24 -- XMLParser/KanalObjekt.cs | 8 + XMLParser/Knoten.cs | 2 + XMLParser/Schacht.cs | 11 + XMLParser/XMLParser.cs | 251 ++++++++++++++++-- XMLParser/parseSchacht.cs | 0 XMLParserTest/UnitTest1.cs | 2 +- 9 files changed, 272 insertions(+), 44 deletions(-) create mode 100644 XMLParser/KanalObjekt.cs create mode 100644 XMLParser/Schacht.cs create mode 100644 XMLParser/parseSchacht.cs diff --git a/XMLParser/AbwassertechnischeAnlage.cs b/XMLParser/AbwassertechnischeAnlage.cs index bd19c77..427bdc6 100644 --- a/XMLParser/AbwassertechnischeAnlage.cs +++ b/XMLParser/AbwassertechnischeAnlage.cs @@ -1,6 +1,6 @@ namespace XMLParser { - internal class AbwassertechnischeAnlage + public class AbwassertechnischeAnlage { string objektbezeichnung; EObjektArt objektArt; diff --git a/XMLParser/Enums.cs b/XMLParser/Enums.cs index e4217cb..e7ff1b9 100644 --- a/XMLParser/Enums.cs +++ b/XMLParser/Enums.cs @@ -49,4 +49,20 @@ namespace XMLParser RINNE, GERINNE } + + public enum ESchachtFunktion + { + SCHACHT = 1, + SONDERSCHACHT, + KONTROLLSCHACHT, + DROSSELSCHACHT, + LAMPENSCHACHT, + PROBENAHMESCHACHT, + HAUSREVISIONSCHACHT, + VERBINDUNGSSCHACHT, + SCHACHTMITNOTUEBERLAUF, + INSPEKTIONSOEFFNUNG, + REINIGUNGSOEFFNUNG, + PROBENAHMEOEFFNUNG + } } diff --git a/XMLParser/InspizierteAbwassertechnischeAnlage.cs b/XMLParser/InspizierteAbwassertechnischeAnlage.cs index 7b280b2..f966b03 100644 --- a/XMLParser/InspizierteAbwassertechnischeAnlage.cs +++ b/XMLParser/InspizierteAbwassertechnischeAnlage.cs @@ -4,8 +4,6 @@ namespace XMLParser { string objektbezeichnung; Lage lage; - Kante kante; - Geometrie geometrie; EAnlagetyp anlagentyp; OptischeInspektion optischeInspektion; @@ -20,28 +18,6 @@ namespace XMLParser objektbezeichnung = value; } } - public Kante Kante - { - get - { - return kante; - } - set - { - kante = value; - } - } - public Geometrie Geometrie - { - get - { - return geometrie; - } - set - { - geometrie = value; - } - } public EAnlagetyp Anlagentyp { get diff --git a/XMLParser/KanalObjekt.cs b/XMLParser/KanalObjekt.cs new file mode 100644 index 0000000..4bc9855 --- /dev/null +++ b/XMLParser/KanalObjekt.cs @@ -0,0 +1,8 @@ +namespace XMLParser +{ + public class KanalObjekt + { + public AbwassertechnischeAnlage Stammdaten { get; internal set; } + public InspizierteAbwassertechnischeAnlage Inspektionsdaten { get; internal set; } + } +} \ No newline at end of file diff --git a/XMLParser/Knoten.cs b/XMLParser/Knoten.cs index df1c409..af86738 100644 --- a/XMLParser/Knoten.cs +++ b/XMLParser/Knoten.cs @@ -4,8 +4,10 @@ namespace XMLParser { EKnotenTyp knotenTyp; Anschlusspunkt anschlusspunkt; + Schacht schacht; public EKnotenTyp KnotenTyp { get => knotenTyp; set => knotenTyp = value; } + public Schacht Schacht { get => schacht; set => schacht = value; } internal Anschlusspunkt Anschlusspunkt { get => anschlusspunkt; set => anschlusspunkt = value; } } } \ No newline at end of file diff --git a/XMLParser/Schacht.cs b/XMLParser/Schacht.cs new file mode 100644 index 0000000..79379be --- /dev/null +++ b/XMLParser/Schacht.cs @@ -0,0 +1,11 @@ +namespace XMLParser +{ + public class Schacht + { + ESchachtFunktion schachtFunktion; + decimal schachtTiefe; + + public ESchachtFunktion SchachtFunktion { get => schachtFunktion; set => schachtFunktion = value; } + public decimal SchachtTiefe { get => schachtTiefe; set => schachtTiefe = value; } + } +} \ No newline at end of file diff --git a/XMLParser/XMLParser.cs b/XMLParser/XMLParser.cs index e7ce625..1525801 100644 --- a/XMLParser/XMLParser.cs +++ b/XMLParser/XMLParser.cs @@ -10,7 +10,23 @@ namespace XMLParser { public static class XMLParser { - public static void LoadFile(string xmldatei) { + public static List ParseFile(string xmldatei) + { + Tuple,List> src = LoadFile(xmldatei); + List Stammdaten = src.Item1.FindAll(x => x.ObjektArt.Equals(EObjektArt.KNOTEN)); + List Inspektionsdaten = src.Item2; + + List kanalObjekte = new List(); + foreach(InspizierteAbwassertechnischeAnlage iat in Inspektionsdaten) { + AbwassertechnischeAnlage stammdaten = Stammdaten.Find(x => x.Objektbezeichnung.Equals(iat.Objektbezeichnung));//; + kanalObjekte.Add(new KanalObjekt() { + Stammdaten = stammdaten, + Inspektionsdaten = iat, + }); + } + return kanalObjekte; + } + private static Tuple,List> LoadFile(string xmldatei) { List Stammdaten = new List(); List Inspektionsdaten = new List(); @@ -24,6 +40,7 @@ namespace XMLParser Stammdaten = LoadStammdatenCollectiv(manager, root); Inspektionsdaten = LoadInspektionsdatenCollectiv(manager,root); + return new Tuple, List>(Stammdaten,Inspektionsdaten); } private static List LoadInspektionsdatenCollectiv(XmlNamespaceManager manager, XmlNode root) @@ -41,14 +58,6 @@ namespace XMLParser private static InspizierteAbwassertechnischeAnlage ParseInspektion(XmlNode node) { - XmlNode intOptischeInspektion = null; - //XmlNode intRohrleitung = null; - - //XmlNode intRGrunddaten = null; - //XmlNode intInspektionsdaten = null; - XmlNode intKanten = null; - XmlNode intGeometrie = null; - InspizierteAbwassertechnischeAnlage result = new InspizierteAbwassertechnischeAnlage(); foreach (XmlNode d in node.ChildNodes) { @@ -61,14 +70,6 @@ namespace XMLParser case "Anlagentyp": result.Anlagentyp = (EAnlagetyp)Convert.ToInt32(d.InnerText); //anlagentyp = Convert.ToInt32(d.InnerText); break; - - case "Kante": - intKanten = d; - //Debugger.Break(); - break; - case "Geometrie": - intGeometrie = d; - break; case "Lage": //throw new NotImplementedException(); if (!d.HasChildNodes) break; @@ -88,9 +89,204 @@ namespace XMLParser result.Lage = new Lage(strassename, ortname); break; case "OptischeInspektion": - intOptischeInspektion = d; + result.OptischeInspektion = parseOptischeInspektion(d); break; + } + } + return result; + } + private static OptischeInspektion parseOptischeInspektion(XmlNode d) + { + OptischeInspektion result = new OptischeInspektion(); + string datum = ""; + string time = ""; + foreach(XmlNode node in d.ChildNodes) + { + switch(node.Name) + { + case "Auftragskennung": + break; + case "Inspektionsdatum": + datum = node.InnerText; + break; + case "Inspektionsverfahren": + break; + case "NameUntersucher": + break; + case "Uhrzeit": + time = node.InnerText; + break; + case "Wetter": + break; + case "Reinigung": + break; + case "Wasserhaltung": + break; + case "Rohrleitung": + result.Rohrleitung = parseRohrleitung(node); + break; + } + } + result.Inspektionstime = makeInspektionstime(datum, time); + + return result; + } + + private static Rohrleitung parseRohrleitung(XmlNode node) + { + Rohrleitung result = new Rohrleitung(); + foreach (XmlNode d in node) + { + switch (d.Name) + { + case "Rohrleitungstyp": + result.Rohrleitungstyp = (ERohrleitungstyp)Convert.ToInt32(d.InnerText); + break; + case "Inspektionslaenge": + result.Inspektionslaenge = Convert.ToDecimal(d.InnerText.Replace('.', ',')); + break; + case "Inspektionsrichtung": + result.Inspektionsrichtung = d.InnerText; + break; + case "RGrunddaten": + result.Grunddaten = ParseGrundDaten(d); + break; + case "Inspektionsdaten": + result.Zustaende = ParseRZustand(d); + break; + } + } + return result; + } + + private static List ParseRZustand(XmlNode node) + { + List result = new List(); + + foreach(XmlNode child in node.ChildNodes) + { + RZustand rZustand = new RZustand(); + foreach(XmlNode d in child.ChildNodes) + { + + switch(d.Name) + { + case "Station": + rZustand.Station = Convert.ToDecimal(d.InnerText.Replace('.', ',')); + break; + case "InspektionsKode": + rZustand.Inspektionskode = d.InnerText; + break; + case "Charakterisierung1": + rZustand.Charakterisierung1 = d.InnerText; + break; + case "Charakterisierung2": + rZustand.Charakterisierung2 = d.InnerText; + break; + case "Verbindung": + rZustand.Verbindung = d.InnerText.Equals("0") ? false : true; + break; + case "PositionVon": + rZustand.PositionVon = Convert.ToInt32(d.InnerText); + break; + case "PositionBis": + rZustand.PositionBis = Convert.ToInt32(d.InnerText); + break; + case "Quantifizierung1Numerisch": + Quantifizierung quantifizierung1 = new Quantifizierung(); + quantifizierung1.Numerisch = Convert.ToDecimal(d.InnerText.Replace('.', ',')); + rZustand.Quantifizierung1 = quantifizierung1; + break; + case "Quantifizierung2Numerisch": + Quantifizierung quantifizierung2 = new Quantifizierung(); + quantifizierung2.Numerisch = Convert.ToDecimal(d.InnerText.Replace('.', ',')); + rZustand.Quantifizierung1 = quantifizierung2; + break; + case "Quantifizierung1Text": + Quantifizierung quantifizierung3 = new Quantifizierung(); + quantifizierung3.Text = d.InnerText; + rZustand.Quantifizierung1 = quantifizierung3; + break; + case "Quantifizierung2Text": + Quantifizierung quantifizierung4 = new Quantifizierung(); + quantifizierung4.Text = d.InnerText; + rZustand.Quantifizierung2 = quantifizierung4; + break; + case "Frame": break; + case "Klassifizierung":break; + case "Kommentar": rZustand.Kommentar = d.InnerText; break; + case "Streckenschaden": rZustand.Streckenschaden = d.InnerText; break; + case "StreckenschadenLfdNr": rZustand.Streckenschadennr = Convert.ToInt32(d.InnerText); break; + case "BezeichnungSanierung": break; + case "RVerfahrenSanierung":break; + case "Fotodatei":break; + case "FotoSpeichermedium":break; + case "Fotonummer":break; + case "Timecode":break; + default: throw new NotImplementedException(d.Name); + + } + } + result.Add(rZustand); + } + + + return result; + } + + private static RGrunddaten ParseGrundDaten(XmlNode intRGrunddaten) + { + RGrunddaten grunddaten = new RGrunddaten(); + foreach(XmlNode d in intRGrunddaten.ChildNodes) + { + switch(d.Name) + { + case "KnotenZulauf": grunddaten.KnotenZulauf = d.InnerText; break; + case "KnotenZulaufTyp": grunddaten.KnotenZulaufTyp = (EKnotenTyp)Convert.ToInt32(d.InnerText); break; + case "KnotenAblauf": grunddaten.KnotenAblauf = d.InnerText; break; + case "KnotenAblaufTyp": grunddaten.KnotenAblaufTyp = (EKnotenTyp)Convert.ToInt32(d.InnerText); break; + case "HerkunftProfilmasse": grunddaten.HerkunftProfilmasse = Convert.ToInt32(d.InnerText); break; + case "Profilhoehe": grunddaten.Profilhoehe = Convert.ToInt32(d.InnerText); break; + case "Profilbreite": grunddaten.Profilbreite = Convert.ToInt32(d.InnerText); break; + case "Profilart": grunddaten.Profilart = Convert.ToInt32(d.InnerText); break; + case "HerkunftMaterial": grunddaten.HerkunftMaterial = Convert.ToInt32(d.InnerText); break; + case "Material": grunddaten.Material = d.InnerText; break; + case "Regeleinzelrohrlaenge": grunddaten.Regeleinzelrohrlaenge = Convert.ToDecimal(d.InnerText.Replace('.', ',')); break; + case "ArtAuskleidung": grunddaten.ArtAuskleidung = Convert.ToInt32(d.InnerText); break; + case "Kanalart": grunddaten.Kanalart = d.InnerText; break; + case "Anschlussdaten": grunddaten.Anschlussddaten = ParseAnschlussdaten(d); break; + case "Innenschutz": grunddaten.Innenschutz = d.InnerText; break; + default: throw new NotImplementedException(d.Name); + } + } + return grunddaten; + } + private static DateTime makeInspektionstime(string datum, string time) + { + string[] parseddatum = datum.Split('-'); + int year = Convert.ToInt32(parseddatum[0]); + int month = Convert.ToInt32(parseddatum[1]); + int day = Convert.ToInt32(parseddatum[2]); + + string[] parsedtime = time.Split(':'); + int hour = Convert.ToInt32(parsedtime[0]); + int minute = Convert.ToInt32(parsedtime[1]); + int second = Convert.ToInt32(parsedtime[2]); + return new DateTime(year, month, day, hour, minute, second); + } + private static Anschlussdaten ParseAnschlussdaten(XmlNode anschlussdaten) + { + Anschlussdaten result = new Anschlussdaten(); + foreach(XmlNode d in anschlussdaten.ChildNodes) + { + switch(d.Name) + { + case "Objektbezeichnung": result.Objektbezeichnung = d.InnerText; break; + case "Kantentyp": result.Kantentyp = (EKantenTyp)Convert.ToInt32(d.InnerText);break; + case "Entfernung": result.Entfernung = Convert.ToDecimal(d.InnerText.Replace('.', ',')); break; + case "Fixierung": result.Fixierung = d.InnerText; break; + } } return result; @@ -120,6 +316,7 @@ namespace XMLParser case "Objektart":result.ObjektArt = (EObjektArt)Convert.ToInt32(aktuell.InnerText); break; case "Entwaesserungsart":result.Entwaesserungsart = aktuell.InnerText;break; case "Knoten":result.Knoten = parseStammdatenKnoten(aktuell); break; + case "Kante": result.Kante = parseKante(aktuell); break; case "Lage": break; } @@ -128,6 +325,11 @@ namespace XMLParser return result; } + private static Kante parseKante(XmlNode aktuell) + { + throw new NotImplementedException(); + } + private static Knoten parseStammdatenKnoten(XmlNode aktuell) { Knoten result = new Knoten(); @@ -137,10 +339,23 @@ namespace XMLParser { case "KnotenTyp": result.KnotenTyp = (EKnotenTyp)Convert.ToInt32(s.InnerText);break; case "Anschlusspunkt": result.Anschlusspunkt = new Anschlusspunkt() { Punktkennung = s.InnerText }; break; + case "Schacht": result.Schacht = parseSchacht(s); break; } } return result; } + + private static Schacht parseSchacht(XmlNode s) + { + Schacht result = new Schacht(); + foreach(XmlNode n in s.ChildNodes) { + switch(n.Name) { + case "SchachtFunktion": result.SchachtFunktion = (ESchachtFunktion)Convert.ToInt32(n.InnerText); break; + case "Schachttiefe": result.SchachtTiefe = Convert.ToDecimal(n.InnerText); break; + } + } + return result; + } } } diff --git a/XMLParser/parseSchacht.cs b/XMLParser/parseSchacht.cs new file mode 100644 index 0000000..e69de29 diff --git a/XMLParserTest/UnitTest1.cs b/XMLParserTest/UnitTest1.cs index bfd0082..d72a06f 100644 --- a/XMLParserTest/UnitTest1.cs +++ b/XMLParserTest/UnitTest1.cs @@ -8,7 +8,7 @@ namespace XMLParserTest [TestMethod] public void TestMethod1() { - XMLParser.XMLParser.LoadFile("input.xml"); + var s = XMLParser.XMLParser.ParseFile("input.xml"); } } }