XML datei wird nun vollständig geparst

This commit is contained in:
HuskyTeufel
2021-08-04 13:21:18 +02:00
parent 596a5da903
commit 765b914624
9 changed files with 272 additions and 44 deletions

View File

@@ -1,6 +1,6 @@
namespace XMLParser
{
internal class AbwassertechnischeAnlage
public class AbwassertechnischeAnlage
{
string objektbezeichnung;
EObjektArt objektArt;

View File

@@ -49,4 +49,20 @@ namespace XMLParser
RINNE,
GERINNE
}
public enum ESchachtFunktion
{
SCHACHT = 1,
SONDERSCHACHT,
KONTROLLSCHACHT,
DROSSELSCHACHT,
LAMPENSCHACHT,
PROBENAHMESCHACHT,
HAUSREVISIONSCHACHT,
VERBINDUNGSSCHACHT,
SCHACHTMITNOTUEBERLAUF,
INSPEKTIONSOEFFNUNG,
REINIGUNGSOEFFNUNG,
PROBENAHMEOEFFNUNG
}
}

View File

@@ -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

8
XMLParser/KanalObjekt.cs Normal file
View File

@@ -0,0 +1,8 @@
namespace XMLParser
{
public class KanalObjekt
{
public AbwassertechnischeAnlage Stammdaten { get; internal set; }
public InspizierteAbwassertechnischeAnlage Inspektionsdaten { get; internal set; }
}
}

View File

@@ -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; }
}
}

11
XMLParser/Schacht.cs Normal file
View File

@@ -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; }
}
}

View File

@@ -10,7 +10,23 @@ namespace XMLParser
{
public static class XMLParser
{
public static void LoadFile(string xmldatei) {
public static List<KanalObjekt> ParseFile(string xmldatei)
{
Tuple<List<AbwassertechnischeAnlage>,List<InspizierteAbwassertechnischeAnlage>> src = LoadFile(xmldatei);
List<AbwassertechnischeAnlage> Stammdaten = src.Item1.FindAll(x => x.ObjektArt.Equals(EObjektArt.KNOTEN));
List<InspizierteAbwassertechnischeAnlage> Inspektionsdaten = src.Item2;
List<KanalObjekt> kanalObjekte = new List<KanalObjekt>();
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<AbwassertechnischeAnlage>,List<InspizierteAbwassertechnischeAnlage>> LoadFile(string xmldatei) {
List<AbwassertechnischeAnlage> Stammdaten = new List<AbwassertechnischeAnlage>();
List<InspizierteAbwassertechnischeAnlage> Inspektionsdaten = new List<InspizierteAbwassertechnischeAnlage>();
@@ -24,6 +40,7 @@ namespace XMLParser
Stammdaten = LoadStammdatenCollectiv(manager, root);
Inspektionsdaten = LoadInspektionsdatenCollectiv(manager,root);
return new Tuple<List<AbwassertechnischeAnlage>, List<InspizierteAbwassertechnischeAnlage>>(Stammdaten,Inspektionsdaten);
}
private static List<InspizierteAbwassertechnischeAnlage> 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,8 +89,203 @@ 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<RZustand> ParseRZustand(XmlNode node)
{
List<RZustand> result = new List<RZustand>();
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;
}
}
@@ -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;
}
}
}

View File

View File

@@ -8,7 +8,7 @@ namespace XMLParserTest
[TestMethod]
public void TestMethod1()
{
XMLParser.XMLParser.LoadFile("input.xml");
var s = XMLParser.XMLParser.ParseFile("input.xml");
}
}
}