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

View File

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

View File

@@ -8,45 +8,76 @@ using System.Xml;
namespace XMLParser
{
public static class XMLParser
public class XMLParser
{
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;
private List<AbwassertechnischeAnlage> stammdaten = null;
private List<InspizierteAbwassertechnischeAnlage> inspektionsdaten = null;
private XmlNamespaceManager manager = null;
private XmlNode rootChild = null;
private List<KanalObjekt> kanalObjekte = null;
private Queue<AbwassertechnischeAnlage> QueueToRebuild = new Queue<AbwassertechnischeAnlage>();
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,
public List<KanalObjekt> KanalObjekte { get => kanalObjekte; private set => kanalObjekte = value; }
public XMLParser(string xmlfile)
{
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,
});
}
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<InspizierteAbwassertechnischeAnlage> Inspektionsdaten = new List<InspizierteAbwassertechnischeAnlage>();
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<AbwassertechnischeAnlage>, List<InspizierteAbwassertechnischeAnlage>>(Stammdaten,Inspektionsdaten);
}
private static List<InspizierteAbwassertechnischeAnlage> LoadInspektionsdatenCollectiv(XmlNamespaceManager manager, XmlNode root)
private List<InspizierteAbwassertechnischeAnlage> LoadInspektionsdatenCollectiv()
{
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);
foreach(XmlNode node in Inspektionsdaten) {
@@ -292,10 +323,10 @@ namespace XMLParser
return result;
}
private static List<AbwassertechnischeAnlage> LoadStammdatenCollectiv(XmlNamespaceManager manager,XmlNode root)
private List<AbwassertechnischeAnlage> LoadStammdatenCollectiv()
{
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);
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)

View File

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