public void DataXMLappendToNode(string TargetFile, string TargetNode, string ID, string Name = "NoNameNN")
        {
            /* Speichert die Daten in der NNData-Klasse des zugehörigen NeuralNetwork im XML-File TargetFile,
             * innerhalb der Node TargetNode (TargetNode muss direkt am DocumentElement der XML-Datei hängen).
             * Die Node des gespeichterten NN wird mti dem Namen Name
             * und der Identifikationsnummer ID (Attribut der Node mit dem Namen, root-Node des neu gespeicherten NN) versehen */

            XmlDocument doc = new XmlDocument();

            doc.Load(TargetFile);

            XmlNode NNroot, NNhead, NumIpNeur_Node, NumHdNeur_Node, NumOpNeur_Node, Weights_Node;

            NNroot = doc.SelectSingleNode(TargetNode);
            NNhead = doc.CreateElement(Name);

            // Schreibe ID als Attribute in die Node des NN
            XmlAttribute ID_Attribute;

            ID_Attribute           = doc.CreateAttribute("ID");
            ID_Attribute.InnerText = ID;
            NNhead.Attributes.Append(ID_Attribute);

            NNroot.AppendChild(NNhead);
            // Node für Anzahl input-neurons
            NumIpNeur_Node           = doc.CreateElement("NumberOfIpNeurons");
            NumIpNeur_Node.InnerText = Data.NumIpNeur.ToString();
            NNhead.AppendChild(NumIpNeur_Node);
            // Node für Anzahl hidden-neurons
            NumHdNeur_Node           = doc.CreateElement("NumberOfHdNeurons");
            NumHdNeur_Node.InnerText = Data.NumHdNeur.ToString();
            NNhead.AppendChild(NumHdNeur_Node);
            // Node für Anzahl output-neurons
            NumOpNeur_Node           = doc.CreateElement("NumberOfOpNeurons");
            NumOpNeur_Node.InnerText = Data.NumOpNeur.ToString();
            NNhead.AppendChild(NumOpNeur_Node);

            // Node, an der die Werte aller Connection-Gewiche hängen
            var NNweights = Data.Weights;

            Weights_Node = doc.CreateElement("Weights");
            for (int i = 0; i < NNweights.GetLength(0); i++)
            {
                var          next_weight = doc.CreateElement("Weight");
                XmlAttribute Number_Attribute;
                Number_Attribute           = doc.CreateAttribute("NR");
                Number_Attribute.InnerText = Convert.ToString(i);

                next_weight.InnerText = NNweights[i].ToString();
                next_weight.Attributes.Append(Number_Attribute);

                Weights_Node.AppendChild(next_weight);
            }
            NNhead.AppendChild(Weights_Node);

            doc.Save(TargetFile);
        }
        public void DataToXML(string NN_name = "DummyNameNN", string savepath = @"..\StoredNNs.xml")
        {
            //TODO evt in dieser Form überflüssig. Ggf. entfernen oder zumindest unter der Verwendung von DataXMLappendToNode arbeiten lassen.

            // @ deklariert den folgenden String als verbatim string, dh ua backslashs müssen in pfaden nicht doppelt gesetzt werden wie sonst nötig

            /*Nodes entsprechen Tags aus HTML
             * MotherNode.Append(ChildNode) fügt zu einer existierenden Node "MotherNode" eine node "ChildNode" hinzu, ähnlich einer Baumstruktur
             * der etxt innerhalb der Tags wird mit "MotherNode.InnerText = ..." bzw "childNode.InnerText = ...." gesetzt*/

            var         NNweights = Data.Weights;
            XmlDocument doc       = new XmlDocument();

            XmlNode docRoot, NNroot, NumIpNeur_Node, NumHdNeur_Node, NumOpNeur_Node, Weights_Node;

            docRoot = doc.CreateElement("subroot");
            doc.AppendChild(docRoot);
            NNroot = doc.CreateElement(NN_name);

            docRoot.AppendChild(NNroot);

            NumIpNeur_Node           = doc.CreateElement("NumberOfIpNeurons");
            NumIpNeur_Node.InnerText = Data.NumIpNeur.ToString();
            NNroot.AppendChild(NumIpNeur_Node);

            NumHdNeur_Node           = doc.CreateElement("NumberOfHdNeurons");
            NumHdNeur_Node.InnerText = Data.NumHdNeur.ToString();
            NNroot.AppendChild(NumHdNeur_Node);

            NumOpNeur_Node           = doc.CreateElement("NumberOfOpNeurons");
            NumOpNeur_Node.InnerText = Data.NumOpNeur.ToString();
            NNroot.AppendChild(NumOpNeur_Node);

            Weights_Node = doc.CreateElement("Weights");
            for (int i = 0; i < NNweights.GetLength(0); i++)
            {
                var          next_weight = doc.CreateElement("Weight");
                XmlAttribute Number_Attribute;
                Number_Attribute           = doc.CreateAttribute("NR");
                Number_Attribute.InnerText = Convert.ToString(i);

                next_weight.InnerText = NNweights[i].ToString();
                next_weight.Attributes.Append(Number_Attribute);

                Weights_Node.AppendChild(next_weight);
            }
            NNroot.AppendChild(Weights_Node);
            doc.Save(savepath);
        }