Einlesen mi XML



  • Hi Leute könntet ihr mir sagen wie das mit dem einlesen von Xml daten mit C# geht??

    habe bis jetzt den folgenden code

    try
                {
                    XmlSerializer xmls1 = new XmlSerializer(typeof(Parameter));
                    XmlSerializer xmls2 = new XmlSerializer(typeof(ArrayList));
    
                    XmlTextWriter xmlw1 = new XmlTextWriter(param.file, System.Text.Encoding.ASCII);
                    xmls1.Serialize(xmlw1, param);
                    xmls2.Serialize(xmlw1, rohdaten);
                    xmls2.Serialize(xmlw1, messwerte);
                    xmlw1.Close();
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
    

    dieser code schteibt aber die daten nur in den file.

    Bei späteren anwendungen von dem Programm möchte ich die daten die in dem File stehen wider laden und mit denen weiter arbeiten.

    Danke für eure hilfe.

    MfG
    blind





  • nein habe ich nicht da der code nicht funktioniert und ich wollte gestern schon eine verbesserung haben aber da hat mir ja keiner geholfen.

    MfG
    blind



  • Wenn du die Daten wieder einladen willst, mußt du "Deserialize" verwenden.
    Auf dein Beispiel angewendet, z.B.

    param = (Parameter)xmls1.Deserialize(xmlreader);
    


  • jo danke.

    habe jetzt aber noch das Problem das ich nicht mehr als ein Parameter in das Programm lesen kann.

    Hier mein einlese code:

    XmlTextReader xmlw1 = new XmlTextReader("test.xml");
                    xmlw1.ReadStartElement("Parameter,Rohdaten,Messdaten");
    
                    param.ePruefling = (string)xmlss.Deserialize(xmlw1);
                    param.eIdent_nr = (string)xmlss.Deserialize(xmlw1);
                    param.ePruefer = (string)xmlss.Deserialize(xmlw1);
                    param.eKunde = (string)xmlss.Deserialize(xmlw1);
                    param.eAbteilung = (string)xmlss.Deserialize(xmlw1);
                    param.ePos_verfahren = (string)xmlss.Deserialize(xmlw1);
                    param.eRef_punkt_x = (double)xmlsd.Deserialize(xmlw1);
                    param.eRef_punkt_y = (double)xmlsd.Deserialize(xmlw1);
                    param.eRef_punkt_z = (double)xmlsd.Deserialize(xmlw1);
                    param.eFusspunkt_abst = (double)xmlsd.Deserialize(xmlw1);
                    param.eStartpunkt = (double)xmlsd.Deserialize(xmlw1);
                    param.eEndpunkt = (double)xmlsd.Deserialize(xmlw1);
                    param.eBrechungsindex = (double)xmlsd.Deserialize(xmlw1);
                    int anzahlRohdaten = (int)xmlsi.Deserialize(xmlw1);
                    int anzahlMesswerte = (int)xmlsi.Deserialize(xmlw1);
                    Console.WriteLine("param übergeben");
    

    ich bekomme beim ausführen immer den Fehler:
    "Das ,-Zeichen, hexidezimaler Wert 0x2C, kann nicht in einen Namen aufgenommen werden. Zeile 1, Position 11."

    Danke für eure bisherige hilfe



  • Servus,

    gut, ich fange mal von vorne an wie man es lösen könnte.

    1. Bau dir eine Parameterklasse. (Hast du ja schon)
    2. Bau dir eine Datenhaltung, welche dir mehrere Objekte der Parameterklassen halten kann.

    Bsp.:

    ArrayList list = new ArrayList();
    
    Parameter param1 = new Parameter(); // Natürlich noch füllen
    Parameter param2 = new Parameter();
    Parameter param3 = new Parameter();
    
    list.Add(param1);
    list.Add(param2);
    list.Add(param3);
    

    3. Bau dir dein Serializer und Deserializer.

    Bsp.:

    public bool WriteData(ArrayList list)
    {
    	XmlSerializer xmlSerializer = new XmlSerializer(typeof(ArrayList));
    
    	try
    	{
            using (TextWriter writer = new StreamWriter(@"C:\bla.txt"))
            {
                xmlSerializer.Serialize( writer, list );
                writer.Close();
            }
    
    		return true;
    	}
    	catch
    	{
    	      return false;
    	}
    }
    
    public bool ReadAvailableFiles()
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(ArrayList));
    
        try
        {
            using (FileStream fileStream = new FileStream(@"C:\bla.txt", FileMode.Open))
            {
                XmlReader xmlReader = new XmlTextReader(fileStream);
    
                ArrayList list = (ArrayList) xmlSerializer.Deserialize(xmlReader);
    
                xmlReader.Close();
                fileStream.Close();
            }
    
            return true;
        }
        catch
        {
            return false;
        }
    }
    

    Ganz einfach oder? Spiele mal ein bisschen damit herum.

    mfg
    Hellsgore



  • soll das heissen das ich nur ein objekt in die liste schreiben kann bzw lesen kann???? das schreiben von mehreren Objekten funktioniert bei mir schon aber ich kann nich mehrere objekte auslesen.

    mfg
    blind



  • Servus,

    wie meinst du das? Du schreibst mit meinem Beispiel den Inhalt der ArrayList in eine Datei. d.h. soviele Datenpakete der Parameter Klasse wie du willst. Du brauchst nur irgendeine Klasse die dir allemöglichen Objekte sammelt. Natürlich kannst du Sie ja auch alle einzeln schreiben und einzeln auslesen, aber dann kommst du ja gerade zu dem Problem das du hast. Pack doch einfach alles in eine Mutterklasse vom Typ Collection und die schreibste weg. Ist simpel und recht schnell.

    mfg
    Hellsgore



  • Hi

    mein Problem bei der sache ist nur das ich nicht nur die Parameterklasse wegspeichere sondern auch noch 2 Array listen. Und ich diese für das laden auch irgendwie trennen muss.

    MfG
    blind



  • Servus,

    du kannst ArrayListen in eine ArrayList packen. Du kannst mit typeof() oder Object.GetType() den Typ des ausgelesenen Objekts herausfinden. Also die Trennungs ist da nicht so schwierig.

    Ach ich habe den alten Thread wiedergefunden:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-145395-and-highlight-is-.html

    Die erste Antwort von mir.

    Das habe ich gemacht:

    - Itemklasse erstellt, welche später ein Item an Informationen enthält. Das kann bei dir die Parameterklasse sein. d.H. dieses Item erhält eine Eigenschaft vom Typ Parameterklasse und eine weitere mit einer ArrayList usw. usf.

    - Collectionklasse erstellt, welche alle Elemente vom Typ der Item Klasse halten kann mit verschiedenen Methoden gedöns..... ich denke mal das brauche ich nicht zu erklären oder?

    - XML serialisiert.

    Das wäre eine Lösung die du verwenden könntest.

    mfg
    Hellsgore


Anmelden zum Antworten