In Xml-Datei schreiben

JaD

Mitglied
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/library/ms759155(VS.85).aspx ein fertiges Beispiel gefunden und wollte es bei mir ausprobiere.
Hier der Code.
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 MessageBoxen
Code:
 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);
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.:confused:
Gruß JaD
 
Zurück