XMLParser hinzugefügt

This commit is contained in:
Husky
2018-05-16 21:26:59 +02:00
parent f19443027e
commit ef626d0844
29 changed files with 1521 additions and 44 deletions

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("SchnittstelleImporter")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SchnittstelleImporter")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("e1564a4d-39fd-489b-8029-aeef33033ef2")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{E1564A4D-39FD-489B-8029-AEEF33033EF2}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SchnittstelleImporter</RootNamespace>
<AssemblyName>SchnittstelleImporter</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="XML2006\Enums.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="XML2006\Anschlussdaten.cs" />
<Compile Include="XML2006\Functions.cs" />
<Compile Include="XML2006\InspizierteAbwassertechnischeAnlage.cs" />
<Compile Include="XML2006\Lage.cs" />
<Compile Include="XML2006\OptischeInspektion.cs" />
<Compile Include="XML2006\RGrunddaten.cs" />
<Compile Include="XML2006\Rohrleitung.cs" />
<Compile Include="XML2006\RZustand.cs" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchnittstelleImporter.XML2006
{
public class Anschlussdaten
{
string objektbezeichnung;
EKantenTyp kantentyp;
decimal entfernung;
string anschlussArt;
string fixierung;
string kommentar;
public string Objektbezeichnung { get => objektbezeichnung; set => objektbezeichnung = value; }
public EKantenTyp Kantentyp { get => kantentyp; set => kantentyp = value; }
public decimal Entfernung { get => entfernung; set => entfernung = value; }
public string AnschlussArt { get => anschlussArt; set => anschlussArt = value; }
public string Fixierung { get => fixierung; set => fixierung = value; }
public string Kommentar { get => kommentar; set => kommentar = value; }
}
}

View File

@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchnittstelleImporter.XML2006
{
public enum EAnlagetyp
{
Haltung = 1,
Anschlussleitung = 2,
Schacht = 3,
Bauwerk = 4
}
public enum EInspektionverfahren
{
TVUntersuchung,
Begehung,
VomSchacht,
Other
}
public enum EWetter
{
KEINNIEDERSCHLAG = 1,
REGEN = 2,
SCHNEE = 3
}
public enum ERohrleitungstyp
{
HALTUNG,
LEITUNG
}
public enum EObjektArt
{
KANTE = 1,
KNOTEN = 2
}
public enum EKnotenTyp
{
SCHACHT = 0,
ANSCHLUSSPUNKT = 1,
BAUWERK = 2
}
public enum EKantenTyp
{
HALTUNG,
LEITUNG,
RINNE,
GERINNE
}
}

View File

@@ -0,0 +1,270 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace SchnittstelleImporter.XML2006
{
public static class XMLParser
{
public static Dictionary<InspizierteAbwassertechnischeAnlage, string> anlageInFile = new Dictionary<InspizierteAbwassertechnischeAnlage, string>();
public static List<InspizierteAbwassertechnischeAnlage> GetList(string xmldatei)
{
List<InspizierteAbwassertechnischeAnlage> result = new List<InspizierteAbwassertechnischeAnlage>();
XmlDocument doc = new XmlDocument();
doc.Load(xmldatei);
XmlNode rootChild = doc.LastChild;
XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("e", "http://www.ofd-hannover.la/Identifikation");
XmlNode root = rootChild.SelectSingleNode("//e:Datenkollektive", manager);
XmlNode zstdk = root.SelectSingleNode("//e:Zustandsdatenkollektiv", manager);
XmlNodeList inspizierteDaten = zstdk.SelectNodes("//e:InspizierteAbwassertechnischeAnlage", manager);
foreach (XmlNode node in inspizierteDaten)
{
InspizierteAbwassertechnischeAnlage anlage = GetAnlage(node);
result.Add(anlage);
anlageInFile.Add(anlage, xmldatei);
}
return result;
}
private static InspizierteAbwassertechnischeAnlage GetAnlage(XmlNode xml)
{
XmlNode intOptischeInspektion = null;
XmlNode intRohrleitung = null;
XmlNode intRGrunddaten = null;
XmlNode intInspektionsdaten = null;
InspizierteAbwassertechnischeAnlage result = new InspizierteAbwassertechnischeAnlage();
foreach (XmlNode d in xml.ChildNodes)
{
switch (d.Name)
{
case "Objektbezeichnung":
result.Objektbezeichnung = d.InnerText;
break;
case "Anlagentyp":
result.Anlagentyp = (EAnlagetyp)Convert.ToInt32(d.InnerText); //anlagentyp = Convert.ToInt32(d.InnerText);
break;
case "Lage":
//throw new NotImplementedException();
if (!d.HasChildNodes) break;
string strassename = "";
string ortname = "";
foreach (XmlNode _temp in d.ChildNodes)
{
switch (_temp.Name)
{
case "Strassenname": strassename = _temp.InnerText; break;
case "Ortsteilname": ortname = _temp.InnerText; break;
default: throw new NotImplementedException(_temp.Name);
}
}
result.Lage = new Lage(strassename, ortname);
break;
case "OptischeInspektion":
intOptischeInspektion = d;
break;
}
}
if (intOptischeInspektion == null)
throw new Exception("Es scheint was schief gelaufen zu sein, OptischeInspektion is null");
string datum = "";
string time = "";
OptischeInspektion optischeInspektion = new OptischeInspektion();
foreach (XmlNode d in intOptischeInspektion)
{
switch (d.Name)
{
case "Inspektionsdatum":
datum = d.InnerText;
break;
case "Uhrzeit":
time = d.InnerText;
break;
case "Rohrleitung":
intRohrleitung = d;
break;
}
}
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]);
DateTime dt = new DateTime(year, month, day, hour, minute, second);
optischeInspektion.Inspektionstime = dt;
if (intRohrleitung == null)
throw new NotImplementedException("Schaechte sind noch nicht implementiert");
Rohrleitung rohr = new Rohrleitung();
foreach (XmlNode d in intRohrleitung)
{
switch (d.Name)
{
case "Rohrleitungstyp":
rohr.Rohrleitungstyp = (ERohrleitungstyp)Convert.ToInt32(d.InnerText);
break;
case "Inspektionslaenge":
rohr.Inspektionslaenge = Convert.ToDecimal(d.InnerText.Replace('.', ','));
break;
case "Inspektionsrichtung":
rohr.Inspektionsrichtung = d.InnerText;
break;
case "RGrunddaten":
intRGrunddaten = d;
break;
case "Inspektionsdaten":
intInspektionsdaten = d;
break;
}
}
//List<RZustand> rzustand = ParseRZustand(intInspektionsdaten);
rohr.Grunddaten = ParseGrundDaten(intRGrunddaten);
rohr.Zustaende = ParseRZustand(intInspektionsdaten);
optischeInspektion.Rohrleitung = rohr;
result.OptischeInspektion = optischeInspektion;
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 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;
default: Trace.WriteLine(d.Name); 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;
default: throw new NotImplementedException(d.Name);
}
}
result.Add(rZustand);
}
return result;
}
}
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchnittstelleImporter.XML2006
{
public sealed class InspizierteAbwassertechnischeAnlage
{
string objektbezeichnung;
Lage lage;
EAnlagetyp anlagentyp;
OptischeInspektion optischeInspektion;
public string Objektbezeichnung
{
get
{
return objektbezeichnung;
}
set
{
objektbezeichnung = value;
}
}
public EAnlagetyp Anlagentyp
{
get
{
return anlagentyp;
}
set
{
anlagentyp = value;
}
}
public OptischeInspektion OptischeInspektion
{
get
{
return optischeInspektion;
}
set
{
optischeInspektion = value;
}
}
public Lage Lage
{
get
{
return lage;
}
set
{
lage = value;
}
}
public override string ToString()
{
return objektbezeichnung;
}
}
}

View File

@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchnittstelleImporter.XML2006
{
public class Lage
{
string strassename;
string ortname;
public string Strassename
{
get
{
return strassename;
}
set
{
strassename = value;
}
}
public string Ortname
{
get
{
return ortname;
}
set
{
ortname = value;
}
}
public Lage(string strassename, string ortname)
{
this.strassename = strassename;
this.ortname = ortname;
}
}
}

View File

@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchnittstelleImporter.XML2006
{
public class OptischeInspektion
{
DateTime inspektionstime;
Rohrleitung rohrleitung;
public DateTime Inspektionstime
{
set
{
inspektionstime = value;
}
get
{
return inspektionstime;
}
}
public string Inspektionsdatum
{
get
{
return inspektionstime.ToShortDateString();
}
/*set
{
throw new NotImplementedException();
//inspektionsdatum = value;
}*/
}
public string Inspektionszeit
{
get
{
return inspektionstime.ToShortTimeString();
}
}
public Rohrleitung Rohrleitung
{
get
{
return rohrleitung;
}
set
{
rohrleitung = value;
}
}
}
}

View File

@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchnittstelleImporter.XML2006
{
public class RGrunddaten
{
string knotenZulauf;
EKnotenTyp knotenZulaufTyp;
string knotenAblauf;
EKnotenTyp knotenAblaufTyp;
int profilhoehe;
int profilbreite;
int profilart;
string material;
string kanalart;
Anschlussdaten anschlussddaten = null;
int herkunftProfilmasse;
int herkunftMaterial;
decimal regeleinzelrohrlaenge;
int artAuskleidung;
string innenschutz;
public string KnotenZulauf { get => knotenZulauf; set => knotenZulauf = value; }
public EKnotenTyp KnotenZulaufTyp { get => knotenZulaufTyp; set => knotenZulaufTyp = value; }
public string KnotenAblauf { get => knotenAblauf; set => knotenAblauf = value; }
public EKnotenTyp KnotenAblaufTyp { get => knotenAblaufTyp; set => knotenAblaufTyp = value; }
public int Profilhoehe { get => profilhoehe; set => profilhoehe = value; }
public int Profilbreite { get => profilbreite; set => profilbreite = value; }
public int Profilart { get => profilart; set => profilart = value; }
public string Material { get => material; set => material = value; }
public string Kanalart { get => kanalart; set => kanalart = value; }
public Anschlussdaten Anschlussddaten { get => anschlussddaten; set => anschlussddaten = value; }
public int HerkunftProfilmasse { get => herkunftProfilmasse; set => herkunftProfilmasse = value; }
public int HerkunftMaterial { get => herkunftMaterial; set => herkunftMaterial = value; }
public decimal Regeleinzelrohrlaenge { get => regeleinzelrohrlaenge; set => regeleinzelrohrlaenge = value; }
public int ArtAuskleidung { get => artAuskleidung; set => artAuskleidung = value; }
public bool HasGrundleitung
{
get
{
return anschlussddaten != null;
}
}
public string Innenschutz { get => innenschutz; set => innenschutz = value; }
}
}

View File

@@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchnittstelleImporter.XML2006
{
public struct Quantifizierung
{
public decimal Numerisch;
public string Text;
public override string ToString()
{
if (Text != null)
return Text;
if (Numerisch == 0)
return "";
return Numerisch.ToString();
}
}
public class RZustand
{
decimal station;
string inspektionskode;
string charakterisierung1;
string charakterisierung2;
bool verbindung;
Quantifizierung quantifizierung1;
Quantifizierung quantifizierung2;
string streckenschaden;
int streckenschadennr;
int positionVon;
int positionBis;
string kommentar;
public decimal Station { get => station; set => station = value; }
public string Inspektionskode { get => inspektionskode; set => inspektionskode = value; }
public string Charakterisierung1 { get => charakterisierung1; set => charakterisierung1 = value; }
public string Charakterisierung2 { get => charakterisierung2; set => charakterisierung2 = value; }
public bool Verbindung { get => verbindung; set => verbindung = value; }
public Quantifizierung Quantifizierung1 { get => quantifizierung1; set => quantifizierung1 = value; }
public Quantifizierung Quantifizierung2 { get => quantifizierung2; set => quantifizierung2 = value; }
public string Streckenschaden { get => streckenschaden; set => streckenschaden = value; }
public int Streckenschadennr { get => streckenschadennr; set => streckenschadennr = value; }
public int PositionVon { get => positionVon; set => positionVon = value; }
public int PositionBis { get => positionBis; set => positionBis = value; }
public string Kommentar { get => kommentar; set => kommentar = value; }
}
}

View File

@@ -0,0 +1,80 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchnittstelleImporter.XML2006
{
public class Rohrleitung
{
ERohrleitungstyp rohrleitungstyp;
decimal inspektionslaenge;
string inspektionsrichtung;
RGrunddaten grunddaten = null;
List<RZustand> zustaende = null;
public ERohrleitungstyp Rohrleitungstyp
{
get
{
return rohrleitungstyp;
}
set
{
rohrleitungstyp = value;
}
}
public decimal Inspektionslaenge
{
get
{
return inspektionslaenge;
}
set
{
inspektionslaenge = value;
}
}
public string Inspektionsrichtung
{
get
{
switch (inspektionsrichtung)
{
case "U": return "Gegen Fliessrichtung";
case "O": return "In Fliessrichtung";
default: return "Fliessrichtungangabe nicht bekannt(" + inspektionsrichtung + ")";
}
}
set
{
inspektionsrichtung = value;
}
}
public List<RZustand> Zustaende
{
get
{
return zustaende;
}
set
{
zustaende = value;
}
}
public RGrunddaten Grunddaten
{
get
{
return grunddaten;
}
set
{
grunddaten = value;
}
}
}
}