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.
Die Xml-Datei wird geladen und das Programm korrekt Schritt für Schritt durchlaufen.
Und am Ende werden mir die beiden MessageBoxen
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ß JaD
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;
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);
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ß JaD