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>
    

Anmelden zum Antworten