XML datei wird nun vollständig geparst
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
namespace XMLParser
|
||||
{
|
||||
internal class AbwassertechnischeAnlage
|
||||
public class AbwassertechnischeAnlage
|
||||
{
|
||||
string objektbezeichnung;
|
||||
EObjektArt objektArt;
|
||||
|
||||
@@ -49,4 +49,20 @@ namespace XMLParser
|
||||
RINNE,
|
||||
GERINNE
|
||||
}
|
||||
|
||||
public enum ESchachtFunktion
|
||||
{
|
||||
SCHACHT = 1,
|
||||
SONDERSCHACHT,
|
||||
KONTROLLSCHACHT,
|
||||
DROSSELSCHACHT,
|
||||
LAMPENSCHACHT,
|
||||
PROBENAHMESCHACHT,
|
||||
HAUSREVISIONSCHACHT,
|
||||
VERBINDUNGSSCHACHT,
|
||||
SCHACHTMITNOTUEBERLAUF,
|
||||
INSPEKTIONSOEFFNUNG,
|
||||
REINIGUNGSOEFFNUNG,
|
||||
PROBENAHMEOEFFNUNG
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
8
XMLParser/KanalObjekt.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace XMLParser
|
||||
{
|
||||
public class KanalObjekt
|
||||
{
|
||||
public AbwassertechnischeAnlage Stammdaten { get; internal set; }
|
||||
public InspizierteAbwassertechnischeAnlage Inspektionsdaten { get; internal set; }
|
||||
}
|
||||
}
|
||||
@@ -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
11
XMLParser/Schacht.cs
Normal 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; }
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
0
XMLParser/parseSchacht.cs
Normal file
0
XMLParser/parseSchacht.cs
Normal file
@@ -8,7 +8,7 @@ namespace XMLParserTest
|
||||
[TestMethod]
|
||||
public void TestMethod1()
|
||||
{
|
||||
XMLParser.XMLParser.LoadFile("input.xml");
|
||||
var s = XMLParser.XMLParser.ParseFile("input.xml");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user