IXMLDOMDocument
-
Ich würde gerne ein paar Daten, dich ich in mein Programm schreibe in einem XML-Dokument speichern. (und bei Start des Programmes, diese XML-Datei auslesen)
Kann mir einer ein kleiner Beispiel mit IXMLDOMDocument geben.
Leider muss das noch in MSXML 3.0 geschehen.Danke schonmal im Vorraus.
-
Ich habe es nach längerem Probieren rausgefunden.
Hier durchlaufe ich noch eine Hashmap, aber vom Prinzip her funktioniert das so hier:POSITION pos; CPerson *m_Person; CString pfad; pfad = "test1.xml"; //Für die Erstellung der XML-Datei IXMLDOMDocument2Ptr xmlDoc; MSXML2::IXMLDOMElementPtr xmlDocRoot; // Initialize COM ::CoInitialize(NULL); HRESULT hr = xmlDoc.CreateInstance(MSXML2::CLSID_DOMDocument); if (FAILED(hr)) { _com_error er(hr); AfxMessageBox(er.ErrorMessage()); } xmlDoc->load((_variant_t)pfad); xmlDoc->appendChild (xmlDoc->createProcessingInstruction("xml","version=\"1.0\" encoding=\"utf-8\"")); //Festlegen des Root-Tags xmlDoc->documentElement =xmlDoc->createElement("root"); //xmlDoc->documentElement->appendChild(xmlDocRoot); //Durchlaufen der Hashmap und bilden eines DOMDocuments for( pos = map_Person.GetStartPosition(); pos != NULL; ) { VARIANT vtTemp; vtTemp.vt=VT_I2; vtTemp.iVal = 1; // CString key; map_Person.GetNextAssoc( pos, key, (CObject *&)m_Person ); //Anlegen der einzelnen DOM-Knoten MSXML2::IXMLDOMNodePtr EtikettElement = xmlDoc->createNode(vtTemp, "Etikett",""); MSXML2::IXMLDOMNodePtr SnrElement = xmlDoc->createNode(vtTemp, "Seriennummer", ""); MSXML2::IXMLDOMTextPtr SnrTextElement = xmlDoc->createTextNode((_bstr_t)key); MSXML2::IXMLDOMNodePtr NameElement = xmlDoc->createNode(vtTemp, "Name", ""); MSXML2::IXMLDOMTextPtr NameTextElement = xmlDoc->createTextNode((_bstr_t)m_Person->GetName()); MSXML2::IXMLDOMNodePtr wwwAdresseElement = xmlDoc->createNode(vtTemp, "wwwAdresse", ""); MSXML2::IXMLDOMTextPtr wwwAdresseTextElement = xmlDoc->createTextNode((_bstr_t)m_Person->GetwwwAdresse()); MSXML2::IXMLDOMNodePtr wwwTitelElement = xmlDoc->createNode(vtTemp, "wwwTitel", ""); MSXML2::IXMLDOMTextPtr wwwTitelTextElement = xmlDoc->createTextNode((_bstr_t)m_Person->GetTitle()); //Ineinanderschachteln der Knoten wwwTitelElement->appendChild(wwwTitelTextElement); wwwAdresseElement->appendChild(wwwAdresseTextElement); NameElement->appendChild(NameTextElement); SnrElement->appendChild(SnrTextElement); EtikettElement->appendChild(SnrElement); EtikettElement->appendChild(NameElement); EtikettElement->appendChild(wwwAdresseElement); EtikettElement->appendChild(wwwTitelElement); xmlDoc->documentElement->appendChild(EtikettElement); } xmlDoc->save("Test1.xml"); }
Wollte zum besseren Verständnis auch noch den dazugehörigen XML-Baum angeben:
<root> <Etikett> <Seriennummer>0000000000F14FF2</Seriennummer> <Name>Fritz</Name> <wwwAdresse>http://www.fit.fraunhofer.de</wwwAdresse> <wwwTitel>Fraunhofer FIT - Willkommen - Mozilla Firebird</wwwTitel> </Etikett> </root>