XML-Dateien



  • Habe nun noch das Problem, dass ich die XML-Datei nicht richtig durchlaufen kann.
    Bei meiner Schleife, erhallte ich immer nur den ersten Wert des ersten Knoten und nicht die anderen Werte. Kann mir vielleicht nochmal jemand helfen?

    String^ test; 
    test = String::Empty;
    XmlNode ^station;
    XmlElement ^xelem = xd->DocumentElement;
    XmlNodeList^titels = xelem->GetElementsByTagName("text1");
    
    for each (XmlNode^ ti in titels)
    {
    station = xelem->SelectSingleNode("/Film/CXML_Struktur/text1/text()");
    test = station->Value;
    ...
    }
    


  • Warum iterierst Du über die Titels und holt drinnnen aber trotzdem immer dieselbe Node?

    Machs z.B. so:

    XmlElement^ docElement = doc->DocumentElement;
    XmlNodeList^ nodes = docElement->SelectNodes(L"CXML_Samlung/Filme/CXML_Struktur");
    
    for each (XmlNode^ node in nodes)
    {
       XmlNode^ text1Node = node->SelectSingleNode(L"text1/text()")
       String^ text1 = text1Node->Value;
    }
    

    Simon



  • Mensch ein großes Dankschön schon mal! 👍 👍 👍

    MfG
    Hotte



  • Habe nochmal eine Frage:
    Wie kann ich den Fehler abfangen wenn meine XML-Datei nicht die erforderliche Strucktur aufweißt die ich gerne hätte?

    // Erstellt eine Liste aller Knoten
    xmlnodelist = xmlelement->SelectNodes("Filmliste/CXML_Struktur");
    

    MfG
    Hotte



  • Nachdem ich so viel Hilfe erhalten habe, hoffe ich nun nochmal so viel Glück zu haben.

    Ich habe jetzt die XML Datei eingelesen und in einem DataTable gespeichert.

    1. Die habe ich bearbeitet und möchte nun dieses DataTable wieder speichern.
    2. In das gleiche XML-File möchte ich zudem eine zweite DataTable speichern.

    Nur habe ich im Moment mal wieder kein Plan wie das gehen soll, vielleicht kann mir ja jemand helfen?

    Mein Versuch:

    XmlTextWriter^ writer = gcnew XmlTextWriter("Versuch2.xml", System::Text::Encoding::UTF8);
    XmlWriterSettings^ setting = gcnew XmlWriterSettings();
    setting->Indent = true;
    
    writer->WriteString(dtFilmliste->Rows[0]["Filme"]); // Nicht korrekt!
    

    MfG
    Hotte



  • Ich würde nicht über DataTable gehen. Du hast überhaupt keine Abstraktion. Da könntest Du gleich bei DOM bleiben.

    Machs doch so:
    1. XML File via DOM einlesen und in ein geeignetes Objekt Modell abbilden
    2. Objekt Modell manipulieren (wobei indirekt der DOM Baum bearbeitet wird)
    3. Objekt Modell via DOM wieder speichern.

    Simon



  • Hallo theta!

    Was meinst du mit Objekt Modell?
    Ich wollte eigentlich eine Datanbank vermeiden.

    MfG
    Hotte



  • Brauche nochmal eure Hilfe. Möchte mein DOM nun erweitern, aber irgendwie scheitere ich. Ich möchte nun neben dem Film und den Filmtitel dazu die passende Filmlänge einfügen pro Datansatz.

    // Neuer Knoten erzeugen
    XmlNode^ newelem = xmldoku->CreateNode(XmlNodeType::Element,"Filmlänge", nullptr );
    //Neuer Wert des Knoten
    newelem->InnerText = "200 min";
    
    XmlElement^ root = xmldoku->DocumentElement;
    //XmlNode^ newl = xmldoku->SelectSingleNode("text1/text()"); // ??
    root->AppendChild(newelem); // Läuft fügt aber den Knoten am Ende ein
    //root->InsertAfter(newelem, newl); //Läuft nicht
    xmldoku->Save("Versuch4.xml");
    

    MfG
    Hotte





  • Jo Danke nochmal an theta. Habe es hinbekommen.

    Eine gute Seite ist auch:

    http://www.microsoft-press.de/chapter.asp?cnt=getchapter&id=ms-091_1.pdf

    die ich nach längerem suchen gefunden habe.


Anmelden zum Antworten