Knoten werden geparsed

This commit is contained in:
HuskyTeufel
2021-08-04 15:10:12 +02:00
parent 765b914624
commit 136ae44e18
4 changed files with 94 additions and 33 deletions

View File

@@ -4,16 +4,19 @@ namespace XMLParser
{ {
decimal sohlhoeheZulauf; decimal sohlhoeheZulauf;
decimal sohlhoeheAblauf; decimal sohlhoeheAblauf;
string knotenZulauf; Knoten knotenZulauf;
string knotenAblauf; Knoten knotenAblauf;
int knotenAblaufTyp; int knotenAblaufTyp;
int knotenZulaufTyp; int knotenZulaufTyp;
bool isFiktiveLeitung = true; bool isFiktiveLeitung = true;
public string knotenZulaufTemp;
public string knotenAblaufTemp;
public decimal SohlhoeheZulauf { get => sohlhoeheZulauf; set => sohlhoeheZulauf = value; } public decimal SohlhoeheZulauf { get => sohlhoeheZulauf; set => sohlhoeheZulauf = value; }
public decimal SohlhoeheAblauf { get => sohlhoeheAblauf; set => sohlhoeheAblauf = value; } public decimal SohlhoeheAblauf { get => sohlhoeheAblauf; set => sohlhoeheAblauf = value; }
public string KnotenZulauf { get => knotenZulauf; set => knotenZulauf = value; } public Knoten KnotenZulauf { get => knotenZulauf; set => knotenZulauf = value; }
public string KnotenAblauf { get => knotenAblauf; set => knotenAblauf = value; } public Knoten KnotenAblauf { get => knotenAblauf; set => knotenAblauf = value; }
public int KnotenAblaufTyp { get => knotenAblaufTyp; set => knotenAblaufTyp = value; } public int KnotenAblaufTyp { get => knotenAblaufTyp; set => knotenAblaufTyp = value; }
public int KnotenZulaufTyp { get => knotenZulaufTyp; set => knotenZulaufTyp = value; } public int KnotenZulaufTyp { get => knotenZulaufTyp; set => knotenZulaufTyp = value; }
public bool IsFiktiveLeitung { get => isFiktiveLeitung; set => isFiktiveLeitung = value; } public bool IsFiktiveLeitung { get => isFiktiveLeitung; set => isFiktiveLeitung = value; }

View File

@@ -1,6 +1,6 @@
namespace XMLParser namespace XMLParser
{ {
internal class Knoten public class Knoten
{ {
EKnotenTyp knotenTyp; EKnotenTyp knotenTyp;
Anschlusspunkt anschlusspunkt; Anschlusspunkt anschlusspunkt;

View File

@@ -8,45 +8,76 @@ using System.Xml;
namespace XMLParser namespace XMLParser
{ {
public static class XMLParser public class XMLParser
{ {
public static List<KanalObjekt> ParseFile(string xmldatei) private List<AbwassertechnischeAnlage> stammdaten = null;
{ private List<InspizierteAbwassertechnischeAnlage> inspektionsdaten = null;
Tuple<List<AbwassertechnischeAnlage>,List<InspizierteAbwassertechnischeAnlage>> src = LoadFile(xmldatei); private XmlNamespaceManager manager = null;
List<AbwassertechnischeAnlage> Stammdaten = src.Item1.FindAll(x => x.ObjektArt.Equals(EObjektArt.KNOTEN)); private XmlNode rootChild = null;
List<InspizierteAbwassertechnischeAnlage> Inspektionsdaten = src.Item2; private List<KanalObjekt> kanalObjekte = null;
private Queue<AbwassertechnischeAnlage> QueueToRebuild = new Queue<AbwassertechnischeAnlage>();
List<KanalObjekt> kanalObjekte = new List<KanalObjekt>(); public List<KanalObjekt> KanalObjekte { get => kanalObjekte; private set => kanalObjekte = value; }
foreach(InspizierteAbwassertechnischeAnlage iat in Inspektionsdaten) {
AbwassertechnischeAnlage stammdaten = Stammdaten.Find(x => x.Objektbezeichnung.Equals(iat.Objektbezeichnung));//; public XMLParser(string xmlfile)
kanalObjekte.Add(new KanalObjekt() { {
Stammdaten = stammdaten, KanalObjekte = new List<KanalObjekt>();
stammdaten = new List<AbwassertechnischeAnlage>();
inspektionsdaten = new List<InspizierteAbwassertechnischeAnlage>();
ParseFile(xmlfile);
RebuildStammdaten();
}
private void RebuildStammdaten()
{
// liste an knoten
List<AbwassertechnischeAnlage> 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<AbwassertechnischeAnlage>,List<InspizierteAbwassertechnischeAnlage>> src = LoadRawFile(xmldatei);
stammdaten = src.Item1;//.FindAll(x => x.ObjektArt.Equals(EObjektArt.KNOTEN));
inspektionsdaten = src.Item2;
//kanalObjekte = new List<KanalObjekt>();
foreach(InspizierteAbwassertechnischeAnlage iat in inspektionsdaten) {
AbwassertechnischeAnlage stammdatens = stammdaten.Find(x => x.Objektbezeichnung.Equals(iat.Objektbezeichnung));//;
KanalObjekte.Add(new KanalObjekt() {
Stammdaten = stammdatens,
Inspektionsdaten = iat, Inspektionsdaten = iat,
}); });
} }
return kanalObjekte;
} }
private static Tuple<List<AbwassertechnischeAnlage>,List<InspizierteAbwassertechnischeAnlage>> LoadFile(string xmldatei) { private Tuple<List<AbwassertechnischeAnlage>,List<InspizierteAbwassertechnischeAnlage>> LoadRawFile(string xmldatei) {
List<AbwassertechnischeAnlage> Stammdaten = new List<AbwassertechnischeAnlage>(); List<AbwassertechnischeAnlage> Stammdaten = new List<AbwassertechnischeAnlage>();
List<InspizierteAbwassertechnischeAnlage> Inspektionsdaten = new List<InspizierteAbwassertechnischeAnlage>(); List<InspizierteAbwassertechnischeAnlage> Inspektionsdaten = new List<InspizierteAbwassertechnischeAnlage>();
XmlDocument doc = new XmlDocument(); XmlDocument doc = new XmlDocument();
doc.Load(xmldatei); 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"); 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); Stammdaten = LoadStammdatenCollectiv();
Inspektionsdaten = LoadInspektionsdatenCollectiv(manager,root); Inspektionsdaten = LoadInspektionsdatenCollectiv();
return new Tuple<List<AbwassertechnischeAnlage>, List<InspizierteAbwassertechnischeAnlage>>(Stammdaten,Inspektionsdaten); return new Tuple<List<AbwassertechnischeAnlage>, List<InspizierteAbwassertechnischeAnlage>>(Stammdaten,Inspektionsdaten);
} }
private static List<InspizierteAbwassertechnischeAnlage> LoadInspektionsdatenCollectiv(XmlNamespaceManager manager, XmlNode root) private List<InspizierteAbwassertechnischeAnlage> LoadInspektionsdatenCollectiv()
{ {
List<InspizierteAbwassertechnischeAnlage> result = new List<InspizierteAbwassertechnischeAnlage>(); List<InspizierteAbwassertechnischeAnlage> result = new List<InspizierteAbwassertechnischeAnlage>();
XmlNode zstdk = root.SelectSingleNode("//e:Zustandsdatenkollektiv", manager); XmlNode zstdk = rootChild.SelectSingleNode("//e:Zustandsdatenkollektiv", manager);
XmlNodeList Inspektionsdaten = zstdk.SelectNodes("//e:InspizierteAbwassertechnischeAnlage", manager); XmlNodeList Inspektionsdaten = zstdk.SelectNodes("//e:InspizierteAbwassertechnischeAnlage", manager);
foreach(XmlNode node in Inspektionsdaten) { foreach(XmlNode node in Inspektionsdaten) {
@@ -292,10 +323,10 @@ namespace XMLParser
return result; return result;
} }
private static List<AbwassertechnischeAnlage> LoadStammdatenCollectiv(XmlNamespaceManager manager,XmlNode root) private List<AbwassertechnischeAnlage> LoadStammdatenCollectiv()
{ {
List<AbwassertechnischeAnlage> result = new List<AbwassertechnischeAnlage>(); List<AbwassertechnischeAnlage> result = new List<AbwassertechnischeAnlage>();
XmlNode zstdk = root.SelectSingleNode("//e:Stammdatenkollektiv", manager); XmlNode zstdk = rootChild.SelectSingleNode("//e:Stammdatenkollektiv", manager);
XmlNodeList Stammdaten = zstdk.SelectNodes("//e:AbwassertechnischeAnlage", manager); XmlNodeList Stammdaten = zstdk.SelectNodes("//e:AbwassertechnischeAnlage", manager);
foreach(XmlNode node in Stammdaten) foreach(XmlNode node in Stammdaten)
@@ -305,7 +336,7 @@ namespace XMLParser
return result; return result;
} }
private static AbwassertechnischeAnlage ParseStammdaten(XmlNode node) private AbwassertechnischeAnlage ParseStammdaten(XmlNode node)
{ {
AbwassertechnischeAnlage result = new AbwassertechnischeAnlage(); AbwassertechnischeAnlage result = new AbwassertechnischeAnlage();
foreach(XmlNode aktuell in node.ChildNodes) foreach(XmlNode aktuell in node.ChildNodes)
@@ -313,10 +344,13 @@ namespace XMLParser
switch(aktuell.Name) switch(aktuell.Name)
{ {
case "Objektbezeichnung":result.Objektbezeichnung = aktuell.InnerText;break; 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 "Entwaesserungsart":result.Entwaesserungsart = aktuell.InnerText;break;
case "Knoten":result.Knoten = parseStammdatenKnoten(aktuell); 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": case "Lage":
break; break;
} }
@@ -325,9 +359,33 @@ namespace XMLParser
return result; 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) private static Knoten parseStammdatenKnoten(XmlNode aktuell)

View File

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