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