diff --git a/XMLParser/Kante.cs b/XMLParser/Kante.cs index 4482a1e..6ad7504 100644 --- a/XMLParser/Kante.cs +++ b/XMLParser/Kante.cs @@ -4,16 +4,19 @@ namespace XMLParser { decimal sohlhoeheZulauf; decimal sohlhoeheAblauf; - string knotenZulauf; - string knotenAblauf; + Knoten knotenZulauf; + Knoten knotenAblauf; int knotenAblaufTyp; int knotenZulaufTyp; bool isFiktiveLeitung = true; + public string knotenZulaufTemp; + public string knotenAblaufTemp; + public decimal SohlhoeheZulauf { get => sohlhoeheZulauf; set => sohlhoeheZulauf = value; } public decimal SohlhoeheAblauf { get => sohlhoeheAblauf; set => sohlhoeheAblauf = value; } - public string KnotenZulauf { get => knotenZulauf; set => knotenZulauf = value; } - public string KnotenAblauf { get => knotenAblauf; set => knotenAblauf = value; } + public Knoten KnotenZulauf { get => knotenZulauf; set => knotenZulauf = value; } + public Knoten KnotenAblauf { get => knotenAblauf; set => knotenAblauf = value; } public int KnotenAblaufTyp { get => knotenAblaufTyp; set => knotenAblaufTyp = value; } public int KnotenZulaufTyp { get => knotenZulaufTyp; set => knotenZulaufTyp = value; } public bool IsFiktiveLeitung { get => isFiktiveLeitung; set => isFiktiveLeitung = value; } diff --git a/XMLParser/Knoten.cs b/XMLParser/Knoten.cs index af86738..9ddc048 100644 --- a/XMLParser/Knoten.cs +++ b/XMLParser/Knoten.cs @@ -1,6 +1,6 @@ namespace XMLParser { - internal class Knoten + public class Knoten { EKnotenTyp knotenTyp; Anschlusspunkt anschlusspunkt; diff --git a/XMLParser/XMLParser.cs b/XMLParser/XMLParser.cs index 1525801..c8368d5 100644 --- a/XMLParser/XMLParser.cs +++ b/XMLParser/XMLParser.cs @@ -8,45 +8,76 @@ using System.Xml; namespace XMLParser { - public static class XMLParser + public class XMLParser { - 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; + private List stammdaten = null; + private List inspektionsdaten = null; + private XmlNamespaceManager manager = null; + private XmlNode rootChild = null; + private List kanalObjekte = null; + private Queue QueueToRebuild = new Queue(); - 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, + public List KanalObjekte { get => kanalObjekte; private set => kanalObjekte = value; } + + public XMLParser(string xmlfile) + { + KanalObjekte = new List(); + stammdaten = new List(); + inspektionsdaten = new List(); + ParseFile(xmlfile); + RebuildStammdaten(); + } + + private void RebuildStammdaten() + { + // liste an knoten + List knoten = stammdaten.FindAll(x => x.ObjektArt == EObjektArt.KNOTEN); + while(QueueToRebuild.Count > 0) + { + AbwassertechnischeAnlage anlage = QueueToRebuild.Dequeue(); + anlage.Kante.KnotenZulauf = knoten.Find(x => x.Objektbezeichnung.Equals(anlage.Kante.knotenZulaufTemp)).Knoten; + anlage.Kante.KnotenAblauf = knoten.Find(x => x.Objektbezeichnung.Equals(anlage.Kante.knotenAblaufTemp)).Knoten; + } + + } + + private void ParseFile(string xmldatei) + { + Tuple,List> src = LoadRawFile(xmldatei); + stammdaten = src.Item1;//.FindAll(x => x.ObjektArt.Equals(EObjektArt.KNOTEN)); + inspektionsdaten = src.Item2; + + //kanalObjekte = new List(); + foreach(InspizierteAbwassertechnischeAnlage iat in inspektionsdaten) { + AbwassertechnischeAnlage stammdatens = stammdaten.Find(x => x.Objektbezeichnung.Equals(iat.Objektbezeichnung));//; + KanalObjekte.Add(new KanalObjekt() { + Stammdaten = stammdatens, Inspektionsdaten = iat, }); } - return kanalObjekte; + } - private static Tuple,List> LoadFile(string xmldatei) { + private Tuple,List> LoadRawFile(string xmldatei) { List Stammdaten = new List(); List Inspektionsdaten = new List(); XmlDocument doc = new XmlDocument(); doc.Load(xmldatei); - XmlNode rootChild = doc.LastChild; + rootChild = doc.LastChild; - XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable); + manager = new XmlNamespaceManager(doc.NameTable); manager.AddNamespace("e", "http://www.ofd-hannover.la/Identifikation"); - XmlNode root = rootChild.SelectSingleNode("//e:Datenkollektive", manager); + rootChild = rootChild.SelectSingleNode("//e:Datenkollektive", manager); - Stammdaten = LoadStammdatenCollectiv(manager, root); - Inspektionsdaten = LoadInspektionsdatenCollectiv(manager,root); + Stammdaten = LoadStammdatenCollectiv(); + Inspektionsdaten = LoadInspektionsdatenCollectiv(); return new Tuple, List>(Stammdaten,Inspektionsdaten); } - private static List LoadInspektionsdatenCollectiv(XmlNamespaceManager manager, XmlNode root) + private List LoadInspektionsdatenCollectiv() { List result = new List(); - XmlNode zstdk = root.SelectSingleNode("//e:Zustandsdatenkollektiv", manager); + XmlNode zstdk = rootChild.SelectSingleNode("//e:Zustandsdatenkollektiv", manager); XmlNodeList Inspektionsdaten = zstdk.SelectNodes("//e:InspizierteAbwassertechnischeAnlage", manager); foreach(XmlNode node in Inspektionsdaten) { @@ -292,10 +323,10 @@ namespace XMLParser return result; } - private static List LoadStammdatenCollectiv(XmlNamespaceManager manager,XmlNode root) + private List LoadStammdatenCollectiv() { List result = new List(); - XmlNode zstdk = root.SelectSingleNode("//e:Stammdatenkollektiv", manager); + XmlNode zstdk = rootChild.SelectSingleNode("//e:Stammdatenkollektiv", manager); XmlNodeList Stammdaten = zstdk.SelectNodes("//e:AbwassertechnischeAnlage", manager); foreach(XmlNode node in Stammdaten) @@ -305,7 +336,7 @@ namespace XMLParser return result; } - private static AbwassertechnischeAnlage ParseStammdaten(XmlNode node) + private AbwassertechnischeAnlage ParseStammdaten(XmlNode node) { AbwassertechnischeAnlage result = new AbwassertechnischeAnlage(); foreach(XmlNode aktuell in node.ChildNodes) @@ -313,10 +344,13 @@ namespace XMLParser switch(aktuell.Name) { case "Objektbezeichnung":result.Objektbezeichnung = aktuell.InnerText;break; - case "Objektart":result.ObjektArt = (EObjektArt)Convert.ToInt32(aktuell.InnerText); break; + case "Objektart":result.ObjektArt = (EObjektArt)Convert.ToInt32(aktuell.InnerText);Trace.WriteLine(result.ObjektArt); break; case "Entwaesserungsart":result.Entwaesserungsart = aktuell.InnerText;break; case "Knoten":result.Knoten = parseStammdatenKnoten(aktuell); break; - case "Kante": result.Kante = parseKante(aktuell); break; + case "Kante": + result.Kante = parseKante(aktuell); + QueueToRebuild.Enqueue(result); + break; case "Lage": break; } @@ -325,9 +359,33 @@ namespace XMLParser return result; } - private static Kante parseKante(XmlNode aktuell) + private Kante parseKante(XmlNode aktuell) { - throw new NotImplementedException(); + /* + KantenTyp + KnotenZulauf + KnotenZulaufTyp + KnotenAblauf + KnotenAblaufTyp + SohlhoeheZulauf + SohlhoeheAblauf + Laenge + Material + Profil + Haltung + */ + Kante result = new Kante(); + + foreach(XmlNode s in aktuell.ChildNodes) + { + switch(s.Name) + { + case "KnotenZulauf": result.knotenZulaufTemp = s.InnerText; break; + case "KnotenAblauf": result.knotenAblaufTemp = s.InnerText; break; + + } + } + return result; } private static Knoten parseStammdatenKnoten(XmlNode aktuell) diff --git a/XMLParserTest/UnitTest1.cs b/XMLParserTest/UnitTest1.cs index d72a06f..fdc986a 100644 --- a/XMLParserTest/UnitTest1.cs +++ b/XMLParserTest/UnitTest1.cs @@ -8,7 +8,7 @@ namespace XMLParserTest [TestMethod] public void TestMethod1() { - var s = XMLParser.XMLParser.ParseFile("input.xml"); + XMLParser.XMLParser xml = new XMLParser.XMLParser("input.xml"); } } }