using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; using System.Xml.Linq; using System.Xml.XPath; namespace Eugen.ESystem.IO { public class LoadXMLFile { #region Version und Copyright // Version und Copyright static string dllName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); //Den Programmnamen auslesen static string dllVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); static object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); static string copyright = GenerateCopyright(); string icon = Application.StartupPath + "\\Info.bmp"; //Assembly Datum und Zeit static DateTime value = AssemblyDateTime(); string date = value.ToShortDateString(); string time = value.ToLongTimeString(); private static DateTime AssemblyDateTime() { var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; var buildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * version.Build + TimeSpan.TicksPerSecond * 2 * version.Revision)); //Tage seit dem 1. Januar 2000 und Sekunden seit Mitternacht, (multiplizier mit 2 ergibt das Original) return buildDateTime; } private static string CurrentYear() { DateTime dtn = DateTime.Now; return dtn.Year.ToString(); } private static string StartYear() { string startYear = ""; if (((AssemblyCopyrightAttribute)attributes[0]).Copyright.Contains("Copyright © ")) { startYear = ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace("Copyright © ", ""); while (startYear.StartsWith(" ")) { startYear = startYear.Remove(0, 1); } startYear = startYear.Remove(startYear.IndexOf(" ")); return startYear; } else { DateTime dtn = DateTime.Now; return dtn.Year.ToString(); } } private static string GenerateCopyright() { string startYear = StartYear(); string currentYear = CurrentYear(); if (startYear == currentYear) { return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; } else { return ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace(startYear, String.Concat(startYear, "-", currentYear)); } } #endregion #region DLL-Info /// /// Contains the name of the program file /// public static string DllName { set; get; } /// /// Contains the version of the program file /// public static string DllVersion { set; get; } /// /// Contains the copyright notice /// public static string Copyright { set; get; } private static void SetDllInfo() { //Name, Version und Copyright setzen DllName = dllName; DllVersion = dllVersion; Copyright = copyright; } #endregion static LoadXMLFile() { SetDllInfo(); //Name, Version und Copyright der DLL setzen } public LoadXMLFile() { SetDllInfo(); } public enum LoadAll { No, Yes } public string FileName { get; set; } public string Topic { get; set; } //z.B. "NX-Portal" public string Group { get; set; } //z.B. "NX" public string Key { get; set; } //z.B. "Key" public string[,] Values { get; set; } //z.B. "NX 1953" public int Standard { get; set; } //z.B. "2" public LoadAll LoadAllValues { get; set; } public void Load() { if (File.Exists(FileName)) { // Das Dokument in eine neue XElement-Instanz laden XElement rootElement = XElement.Load(FileName); //Nur wenn das 'rootElement' so beginnt wie 'Topi' heißt oder 'LoadAllValues' 'Yes' ist, dann die Elemente laden if (rootElement.ToString().Remove(rootElement.ToString().IndexOf(" ")) == "<" + Topic || LoadAllValues == LoadAll.Yes) { // Auflistung für die Gruppe erzeugen List groups = new List(); //Alle groups-Elemente einlesen und durchgehen //var personElements = rootElement.Elements(Group); var groupElements = rootElement.Elements(); if (String.IsNullOrEmpty(Group)) { string[] temp = new string[5]; List lkeys = new List(); List lvalues = new List(); List lstandard = new List(); foreach (var groupElement in groupElements) { //Nur wenn das 'groupElement' so beginnt wie 'Group' heißt oder 'LoadAllValues' 'Yes' ist, dann die Elemente laden if (groupElement.ToString().Remove(groupElement.ToString().IndexOf(" ")) == "<" + Group || LoadAllValues == LoadAll.Yes) { temp = groupElement.ToString().Split(' '); //Wenn Leerzeichen im Wert sind, dann werden mehr als 6 Elemente belegt. //In diesem Fall die Teilelemente wieder zu einem Element zusammenführen. if (temp.Length > 6) { int count = temp.Length - 6; for (int i = 1; i < count + 1; i++) { temp[2] += " " + temp[2 + i]; //Die Teilelemente zusammensetzen } var numbersList = temp.ToList(); //Array in eine List umwandeln for (int i = 0; i < count; i++) { numbersList.Remove(numbersList[3]); //Die nicht mehr gültigen Teilelemente löschen } temp = numbersList.ToArray(); //List in ein Array zurückwandeln } Group = ExtractGroup(temp); Key = ExtractKey(temp); lvalues.Add(ExtractValue(temp)); lstandard.Add(ExtractStandard(temp)); } } string[,] values = new string[lvalues.Count, 3]; int standard = 0; for (int i = 0; i < lvalues.Count; i++) { values[i, 2] = lvalues[i]; if (lstandard[i] == "yes") { standard = i + 1; } } Values = values; Standard = standard; } else { foreach (var groupElement in groupElements) { //Nur wenn das 'groupElement' so beginnt wie 'Group' heißt oder 'LoadAllValues' 'Yes' ist, dann die Elemente laden if (groupElement.ToString().Remove(groupElement.ToString().IndexOf(" ")) == "<" + Group || LoadAllValues == LoadAll.Yes) { //Neue Gruppe erzeugen und in der Auflistung ablegen Topics group = new Topics(); groups.Add(group); //Das Attribut id einlesen XAttribute idAttribute = groupElement.Attribute("Id"); if (idAttribute != null) { group.Id = idAttribute.Value; } //Key-Element suchen und speichern XAttribute keyAttribut = groupElement.Attribute(Key); if (keyAttribut != null) { group.Key = keyAttribut.Value; } //Standard-Element suchen und speichern XAttribute standardAttribut = groupElement.Attribute("Standard"); if (standardAttribut != null) { group.Standard = standardAttribut.Value; } } } DataPreperation(groups); } } else { Values = null; } } } private string ExtractGroup(string[] temp) { return temp[0].Remove(0, 1); } private string ExtractKey(string[] temp) { return temp[2].Remove(temp[2].IndexOf("=")); } private string ExtractValue(string[] temp) { return temp[2].Remove(0, temp[2].IndexOf("=") + 1).Replace("\"", ""); } private string ExtractStandard(string[] temp) { return temp[3].Remove(0, temp[3].IndexOf("=") + 1).Replace("\"", ""); } private void DataPreperation(List groups) { string[,] values = new string[groups.Count, 3]; for (int i = 0; i < groups.Count; i++) { values[i, 0] = groups[i].Id; values[i, 1] = groups[i].Key; values[i, 2] = groups[i].Standard; if (groups[i].Standard == "yes") { Standard = i + 1; } } Values = values; } } class Topics { public string Id; public string Key; public string Standard; } }