X81 XML version wird nun importiert
This commit is contained in:
32
Schnittstelle/Import/LV/Model/LVPosition.cs
Normal file
32
Schnittstelle/Import/LV/Model/LVPosition.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Schnittstelle.Import.LV.Model
|
||||||
|
{
|
||||||
|
public class LVPosition
|
||||||
|
{
|
||||||
|
public LVPosition((string Positionsnummer, string Title, string Einheit) m)
|
||||||
|
{
|
||||||
|
this.Positionsnummer = m.Positionsnummer;
|
||||||
|
this.Title = m.Title;
|
||||||
|
this.Einheit = m.Einheit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LVPosition()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Positionsnummer { get; set; } = "";
|
||||||
|
public string Title { get; set; } = "";
|
||||||
|
public string Einheit { get; set; } = "";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Positionsnummer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
157
Schnittstelle/Import/LV/X81.cs
Normal file
157
Schnittstelle/Import/LV/X81.cs
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
using Schnittstelle.Import.LV.Model;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml;
|
||||||
|
|
||||||
|
namespace Schnittstelle.Import.LV
|
||||||
|
{
|
||||||
|
public class X81
|
||||||
|
{
|
||||||
|
|
||||||
|
private List<LVPosition> LVPositionen = new List<LVPosition>();
|
||||||
|
public List<LVPosition> ExportedLVPosition = new List<LVPosition>();
|
||||||
|
|
||||||
|
public X81(string filename)
|
||||||
|
{
|
||||||
|
ParseFile(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ParseFile(string filename)
|
||||||
|
{
|
||||||
|
XmlDocument doc = new XmlDocument();
|
||||||
|
doc.Load(filename);
|
||||||
|
var manager = new XmlNamespaceManager(doc.NameTable);
|
||||||
|
var l = doc.SelectSingleNode("GAEB");
|
||||||
|
XmlNode elements = doc.LastChild.LastChild.LastChild.LastChild;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* foreach in elements where Name = BoQCtgy
|
||||||
|
*/
|
||||||
|
foreach(XmlNode s in elements.ChildNodes )
|
||||||
|
{
|
||||||
|
if(s.Name.Equals("BoQCtgy"))
|
||||||
|
{
|
||||||
|
ParseBoQCtgy(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var gx = LVPositionen.GroupBy(x => x.Positionsnummer).ToList();
|
||||||
|
List<(string Positionsnummer, string Title, string Einheit)> sd = LVPositionen.Select(x => ( x.Positionsnummer, x.Title, x.Einheit)).Distinct().ToList();
|
||||||
|
foreach(var m in sd)
|
||||||
|
{
|
||||||
|
ExportedLVPosition.Add(new LVPosition(m));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ParseBoQCtgy(XmlNode s)
|
||||||
|
{
|
||||||
|
foreach(XmlNode e in s.ChildNodes )
|
||||||
|
{
|
||||||
|
switch(e.Name)
|
||||||
|
{
|
||||||
|
case "LblTx": break;
|
||||||
|
case "BoQBody": ParseBoQBody(e); break;
|
||||||
|
case "BoQCtgy": ParseBoQCtgy(e); break;
|
||||||
|
case "Remark": break;
|
||||||
|
default: throw new NotImplementedException(e.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ParseBoQBody(XmlNode e)
|
||||||
|
{
|
||||||
|
foreach(XmlNode node in e.ChildNodes )
|
||||||
|
{
|
||||||
|
switch(node.Name)
|
||||||
|
{
|
||||||
|
case "BoQCtgy": ParseBoQCtgy(e); break;
|
||||||
|
case "Itemlist": ParseItemList(e); break;
|
||||||
|
case "Remark": break;
|
||||||
|
default: throw new NotImplementedException(node.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ParseItemList(XmlNode e)
|
||||||
|
{
|
||||||
|
foreach(XmlNode node in e.ChildNodes)
|
||||||
|
{
|
||||||
|
switch(node.Name)
|
||||||
|
{
|
||||||
|
case "Remark": break;
|
||||||
|
case "Item": ParseItem(node); break;
|
||||||
|
case "Itemlist": ParseItemList(node); break;
|
||||||
|
default: throw new NotImplementedException(node.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ParseItem(XmlNode node)
|
||||||
|
{
|
||||||
|
LVPosition lVPosition = new LVPosition();
|
||||||
|
foreach (XmlNode snode in node.ChildNodes)
|
||||||
|
{
|
||||||
|
|
||||||
|
switch(snode.Name)
|
||||||
|
{
|
||||||
|
case "QU": lVPosition.Einheit = snode.InnerText; break;
|
||||||
|
case "Description": lVPosition.Title = ParseDescription(snode); break;
|
||||||
|
case "NEMETSCHEK:Codetext": lVPosition.Positionsnummer = ParseCodeText(snode.InnerText); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
LVPositionen.Add(lVPosition);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ParseCodeText(string src)
|
||||||
|
{
|
||||||
|
/* input
|
||||||
|
* 0021010010
|
||||||
|
* should
|
||||||
|
* 002.1.01.0010
|
||||||
|
*/
|
||||||
|
string t1 = src.Substring(0, 3);
|
||||||
|
string t2 = src.Substring(3,1);
|
||||||
|
string t3 = src.Substring(4, 2);
|
||||||
|
string pos = src.Substring(6, 4);
|
||||||
|
return string.Format("{0}.{1}.{2}.{3}",t1,t2,t3,pos);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ParseDescription(XmlNode snode)
|
||||||
|
{
|
||||||
|
foreach(XmlNode snode2 in snode.ChildNodes)
|
||||||
|
{
|
||||||
|
switch (snode2.Name)
|
||||||
|
{
|
||||||
|
case "CompleteText":
|
||||||
|
{
|
||||||
|
foreach(XmlNode snode3 in snode2.ChildNodes)
|
||||||
|
{
|
||||||
|
switch(snode3.Name)
|
||||||
|
{
|
||||||
|
case "DetailTxt": break;
|
||||||
|
case "OutlineText": return snode3.InnerText;
|
||||||
|
case "ComplTSA":
|
||||||
|
case "ComplTSB":
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: throw new NotImplementedException(snode3.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: throw new NotImplementedException(snode2.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user