In Xml-Datei schreiben
-
Hallo,
ich habe mal wieder ein Problem mit Xml.
Naja, mit der Behandlung von C++ aus (mit MSXML6).
Ich würde gerne in eine vorhandene Xml-Datei schreiben.
Habe einiges dazu gelesen und auch schon einiges probiert, aber es wollte nie so ganz klappen.
Jetzt habe ich hier: http://msdn.microsoft.com/en-us/libr...55(VS.85).aspx ein fertiges Beispiel gefunden und wollte es bei mir ausprobiere.
Hier der Code.try { MSXML2::IXMLDOMDocumentPtr docPtr; //init TESTHR(CoInitialize(NULL)); TESTHR(docPtr.CreateInstance("Msxml2.DOMDocument.6.0")); // load a document _variant_t varXml(_T("C:\\...\\Desktop\\bool.xml")); _variant_t varOut((bool)TRUE); varOut = docPtr->load(varXml); if ((bool)varOut == FALSE) {// show error description - IXMLDOMParseError sample MSXML2::IXMLDOMParseErrorPtr errPtr = docPtr->GetparseError(); _bstr_t bstrErr(errPtr->reason); _tprintf(_T("Error:\n")); _tprintf(_T("Code = 0x%x\n"), errPtr->errorCode); _tprintf(_T("Source = Line : %ld; Char : %ld\n"), errPtr->line, errPtr->linepos); _tprintf(_T("Error Description = %s\n"), (char*)bstrErr); } else {// dom fragment sample // create a new node and add to the doc _variant_t varTyp((short)MSXML2::NODE_ELEMENT); _bstr_t varName(_T("BOOK")); MSXML2::IXMLDOMNodePtr nodePtr= docPtr->createNode(varTyp, varName, ""); // create a doc fragment and associate the new node with it MSXML2::IXMLDOMDocumentFragmentPtr fragPtr = docPtr->createDocumentFragment(); fragPtr->appendChild(nodePtr); // add some elements to the new node varName = _T("TITLE"); MSXML2::IXMLDOMNodePtr nodePtr1= docPtr->createNode(varTyp, varName, ""); nodePtr1->text = _T("Creepy Crawlies"); varName = "AUTHOR"; MSXML2::IXMLDOMNodePtr nodePtr2= docPtr->createNode(varTyp, varName, ""); nodePtr2->text = _T("Stefan Knorr"); nodePtr->appendChild(nodePtr1); nodePtr->appendChild(nodePtr2); // display the fragment contents MessageBox(NULL, fragPtr->xml, _T(""), MB_OK); // add the fragment to the original doc docPtr->documentElement->appendChild(fragPtr); // display the modified doc contents MessageBox(NULL, docPtr->xml, _T(""), MB_OK); } } catch (_com_error &e) { _tprintf(_T("Error:\n")); _tprintf(_T("Code = %08lx\n"), e.Error()); _tprintf(_T("Code meaning = %s\n"), (char*) e.ErrorMessage()); _tprintf(_T("Source = %s\n"), (char*) e.Source()); _tprintf(_T("Error Description = %s\n"), (char*) e.Description()); } catch(...) { _tprintf(_T("Unknown error!")); } CoUninitialize(); return 0;Die Xml-Datei wird geladen und das Programm korrekt Schritt für Schritt durchlaufen.
Und am Ende werden mir die beiden MessageBoxenMessageBox(NULL, fragPtr->xml, _T(""), MB_OK); // add the fragment to the original doc docPtr->documentElement->appendChild(fragPtr); // display the modified doc contents MessageBox(NULL, docPtr->xml, _T(""), MB_OK);mit dem korrekten Inhalt angezeigt.
So weit so gut. Nur leider ist die Xml-Datei danach unverändert.
Hoffe jemand hat Erfahrungen in der Richtung und kann mir Helfen.Gruß Janinoe
-
Du veränderst nur die Daten im Speicher. Erst mit docPtr->save wird die geänderte Datei gespeichert.
-
Oh mein Gott. Und ich verbringe Stunden damit, eine Lösung zu finden

Vielen vielen Dank. Mein Tag ist gerettet
Gruß Janinoe